在.csproj文件中指定要添加到nuget包的文件

时间:2020-09-19 12:09:32

标签: c# .net nuget .net-standard nuspec

我正在用一些代码创建一个nuget程序包,但是还需要使用该程序包部署一些工具。

在.nuspec文件中,我可以使用<files>元素来完成此操作,一切都很好。

但是,当使用.nuspec文件时,不包含csproj文件中的packageReferences,并且在手动包含它们(使用<dependencies>元素时)出现了一些问题。

创建的包似乎总是以.net框架包的形式恢复,即使它的目标是.net也是如此,例如this question

我希望,如果我转而使用.csproj格式指定nuget软件包详细信息,那么所有这些问题都会消失,但是有了read the docs我不知道该怎么做。

有人知道怎么做吗?

如果没有,那么谁能从.nuspec文件中创建一个.net framework / .net核心nuget程序包,恢复到正确的目标版本并尊重程序包的依赖关系,又有谁能提供帮助?

1 个答案:

答案 0 :(得分:2)

查找/发现并不容易,但是NuGet的MSBuild tasks文档页面上有一个名为“ including content in a package”的部分,它告诉您NuGet使用的MSBuild项目上的PackagePath元数据将文件复制到软件包中。

因此,在您的csproj中,您可能会遇到这样的情况:

<ItemGroup>
  <None Include="..\MyTool\Tool.exe" PackagePath="tools" Pack="true" />
</ItemGroup>

,那么您的包裹将包含tools\Tool.exe。我不是100%肯定需要Pack="true",但是文档在示例中使用了它,因此我将其放在此处,以防万一。

如果更容易,则可以使用MSBuild的globing复制整个目录。 Include="..\MyTool\*"。我的MSBuild技能不是很先进,所以我不知道如何遍历..\MyTool\**\*,这意味着所有子目录中的所有文件,同时在PackagePath="???"元数据中保持正确的目录布局。因此,我建议的最佳做法是每个目录一个glob。

相关问题