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

Specifying files to add to a nuget package in .csproj file

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

在 .nuspec 文件中,我可以使用 <files> 元素执行此操作,并且一切正常。

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

创建的包似乎也总是恢复为 .net 框架包,即使它是针对 .net 的,如 this question

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

有谁知道是怎么做到的吗?

如果没有,任何人都可以阐明从 .nuspec 文件创建的 .net 框架/.net 核心 nuget 包,恢复到正确的目标版本并尊重包依赖性吗?

find/discover 并不容易,但 NuGet 的 MSBuild tasks docs page has a section called "including content in a package" 告诉您有关 MSBuild 项目的 PackagePath 元数据,NuGet 使用它来将文件复制到包中。

所以,在你的 csproj 中,你可以有这样的东西:

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

然后您的包裹将包含 tools\Tool.exe。我不是 100% 确定 Pack="true" 是必需的,但文档在示例中使用了它,所以我把它放在这里以防万一。

您可以使用 MSBuild 的 globbing 复制整个目录,如果这样更容易的话。 Include="..\MyTool\*"。我的 MSBuild 技能不是那么高超,所以我不知道如何通配 ..\MyTool\**\*,这意味着所有子目录中的所有文件,同时在 PackagePath="???" 元数据中保持正确的目录布局。所以我能建议的最好的是每个目录一个 glob。