我设法让这个工作。对于可能遇到类似问题的任何人:
我主要工作在this answer from Mr Qian。我首先尝试几乎完全按照该帖子中的方式实现:
我将 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 包后立即在消费项目的 Imports 下看到我的<AdditionalFiles>。但是文件副本仍然不起作用。我的 Copy 目标似乎根本没有运行。
经过一番绞尽脑汁、咬牙切齿、拔头发和疯狂的谷歌搜索后,我找到了解决方案:将复制目标上BeforeTargets 的值从“Build”更改为“BeforeBuild”。一旦我做了那个改变,它就完全按照我的意愿工作了。 (嗯,几乎完全一样......它仍然需要构建,我理想地希望在安装 nuget 包时发生副本。)
所以我的工作设置使用了对上面提到的项目文件的更改,以下 .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>