使用 GeneratePackageOnBuild 和版本修补创建 nuget 包

Create a nuget package with GeneratePackageOnBuild and version patching

一段时间以来我一直在努力解决的问题:

我有一个“传统”(即非 SDK)csproj 文件。我想创建一个 nuget 包。这很容易,但魔鬼隐藏在细节中,我最终遇到了以下 catch-22

  1. 无论有无 nuspec 文件,我都可以手动调用 nuget pack .\Foo.csproj,但随后出现 错误。选择的答案建议简单地忽略错误。我很乐意这样做,但是在本地发布包之后,我注意到依赖项没有包含在内。尽管我为了测试添加了对 JSON.net 的依赖。如果我配置我的 yml 来创建包,AppVeyor 中会出现同样的错误。

  1. 我可以通过将 GeneratePackageOnBuild 设置为 true 来指定 .csproj 文件中所有与打包相关的属性。它可以正常工作并正确获取依赖项,但我无法像使用 replacement tokens of nuspec 那样修补版本。版本默认为 1.0.0.0,即使我在 AssemblyInfo.cs 中将其更改为 1.2.3.4

备注

AssemblyInformationalVersion if present, otherwise AssemblyVersion

有没有办法通过 $version$ 补丁真正“合并”.csproj.nuspec 并正确获取 nuspec 中的依赖项?

到目前为止,最好的做法是将项目转换为 SDK 格式。它有几个优点。更少的配置,不需要 .nuspec 文件,不需要 AssemblyInfo.csVersionInfo.cs 文件,.nupkg 依赖是正确的,AppVeyor 可以直接修补 .csproj 文件 如果是SDK工程文件

如果想保留旧格式,本身 不是解决方案,但它可以让您使用 CI/CD 而不是让您与工具作斗争。