问题描述
我正在用一些代码创建一个nuget程序包,但是还需要使用该程序包部署一些工具。
在.nuspec文件中,我可以使用<files>
元素来完成此操作,一切都很好。
但是,当使用.nuspec文件时,不包含csproj文件中的packagereferences
,并且在手动包含它们(使用<dependencies>
元素时)出现了一些问题。
创建的包似乎总是以.net框架包的形式恢复,即使它的目标是.net也是如此,例如this question。
我希望,如果我转而使用.csproj格式指定nuget软件包详细信息,那么所有这些问题都会消失,但是有了read the docs我不知道该怎么做。
有人知道怎么做吗?
如果没有,那么谁能从.nuspec文件中创建一个.net framework / .net核心nuget程序包,恢复到正确的目标版本并尊重程序包的依赖关系,又有谁能提供帮助?
解决方法
查找/发现并不容易,但是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。