我有一个PackageA
,它需要将一个文件复制到最终应用程序的输出中才能按预期工作。我用以下几行将所需的文件包含到PackageA
的项目中:
<ItemGroup>
<Content Include="test.txt">
<PackageCopyToOutput>true</PackageCopyToOutput>
</Content>
</ItemGroup>
如果我直接使用生成的包,文件test.txt
被复制到输出。
现在,如果我从另一个PackageB
引用这个PackageA
,并且只引用PackageB
而不是PackageA
,那么文件test.txt
根本不会复制到输出中,而我期望该文件被传递地复制。
我试着深入研究NuGet/Home存储库的问题,发现我们应该使用PrivateAssets
或类似的东西(github及其所有兄弟库的问题)。但是我从来没有成功过。
我做了一个github仓库来展示我所面临的问题。
我也知道可以通过包含.props
或.targets
文件来复制文件,这样做可以进行预构建或后构建操作,但我发现这种解决方案相当黑客,不优雅,并且随着时间的推移很难设置和维护。而且,我确实觉得NuGet应该很容易支持这种用法,所以也许我遗漏了什么。
根据我的理解,您可以通过向项目引用添加元数据来使用依赖项控制流https://learn.microsoft.com/en-us/nuget/consume-packages/package-references-in-project-files#controlling-dependency-assets
在PackageB.csproj
<ProjectReference Include="../PackageA/PackageA.csproj">
<PrivateAssets>analyzers;build</PrivateAssets>
</ProjectReference>
contentFiles应该在包含的资产
我想建议看看复制NuGet内容文件传递到引用项目,但似乎解决方案是与。targets,所以不完全是你正在寻找的。