[英]Source generator configurable settings file installed with nuget package
我创建了一个源生成器,它从配置文件中读取一些信息,允许使用者更改更改生成器的 output 的设置。 通过将以下内容添加到 .csproj 文件中,该文件将添加到使用项目中:
<ItemGroup>
<AdditionalFiles Include="generator.config" />
</ItemGroup>
我希望同事能够安装我的 nuget package 并将 generator.config 文件以及上述 ItemGroup 自动添加到他们的项目中。
我认为这会很简单,但是到目前为止,我已经花了几天时间试图实现这一目标,但没有运气,我已经准备好拔掉头发了。 我试过了:
我想我可能会遇到一些额外的困难,因为我的消费项目针对 .NET 6,而源生成器必须针对 netstandard2.0。 我只是通过查看 .csproj 文件对 Nuget/MSBuild 有了初步的了解,所以我怀疑我可能遗漏了一些相当明显的东西,但任何帮助/建议都将不胜感激。
我设法让这个工作。 对于可能遇到类似问题的任何人:
我主要从钱先生那里得到这个答案。 我首先尝试几乎完全按照该帖子中的方式实现:
我将 generator.config 文件放在项目根目录中,将以下内容添加到生成器项目文件中:
<ItemGroup>
<None Include="generator.config" Pack="true" PackagePath="lib"></None>
<None Include="build\myGenerator.props" Pack="true" PackagePath="build"></None>
</ItemGroup>
然后我在我的项目根目录下创建了一个“build”目录,并按照链接答案中的建议创建了 myGenerator.props:
<Project>
<ItemGroup>
<AdditionalFiles Include="generator.config" />
</ItemGroup>
<Target Name="CopyGeneratorConfig" BeforeTargets="Build" Condition="!Exists('$(MSBuildProjectDirectory)\generator.config')">
<ItemGroup>
<MyEnvConfig Include="$(MSBuildThisFileDirectory)..\lib\generator.config"/>
</ItemGroup>
<Copy
SourceFiles="@(MyEnvConfig)"
DestinationFolder="$(MSBuildProjectDirectory)"
/>
</Target>
</Project>
但这对我根本不起作用。 似乎什么都没有发生。
通过将<Target>
分离到它自己的 myGenerator.targets 文件中,我取得了一些进展。 这样做之后,我可以在安装 nuget package 后立即在消费项目的 Imports 下看到我的<AdditionalFiles>
。 但是文件副本仍然不起作用。 我的 Copy 目标似乎根本没有运行。
经过一番绞尽脑汁、咬牙切齿、拔头发和疯狂的谷歌搜索后,我找到了一个解决方案:将复制目标上的BeforeTargets
值从“Build”更改为“BeforeBuild”。 一旦我做了那个改变,它就完全按照我的意愿工作了。 (嗯,几乎完全一样......它仍然需要构建,我理想地希望在安装 nuget package 时发生副本。)
所以我的工作设置使用了对上面提到的项目文件的更改,以下 .props 文件(注意之前的名称 .props 和 .targets 必须与您的项目名称匹配):
<Project>
<ItemGroup>
<AdditionalFiles Include="generator.config" />
</ItemGroup>
</Project>
以及以下.targets 文件:
<Project>
<Target Name="CopyGeneratorConfig" BeforeTargets="BeforeBuild" Condition="!Exists('$(MSBuildProjectDirectory)\generator.config')">
<ItemGroup>
<MyEnvConfig Include="$(MSBuildThisFileDirectory)..\lib\generator.config"/>
</ItemGroup>
<Copy
SourceFiles="@(MyEnvConfig)"
DestinationFolder="$(MSBuildProjectDirectory)"
/>
</Target>
</Project>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.