如何跨NuGet包传递复制文件输出?



我有一个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应该很容易支持这种用法,所以也许我遗漏了什么。

在StackOverflow上,也有很多关于传递副本的帖子。然而,据我所知,它总是谈论由项目或项目树直接使用的包。我的问题是一个包被另一个包引用,这个包被一个项目引用。

根据我的理解,您可以通过向项目引用添加元数据来使用依赖项控制流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,所以不完全是你正在寻找的。

最新更新