从 CLI 覆盖 NuGet 包版本

Luk*_*ett 1 nuget nuget-package .net-core dotnet-cli

我喜欢在我的 CICD 管道中为 NuGet 包使用内部版本号或其他一些计算出的版本号。本质上,我喜欢开发人员控制主要和次要版本号,但会自动增加构建。

有了nuget.exe我可以使用-Version开关来覆盖最终包中的版本。但是,对于 .NET Core 2.0 库项目,这失败了,我必须使用dotnet pack,请参阅:

https://github.com/NuGet/Home/issues/4491

这只是一个--version-prefixCLI 参数,dotnet pack所以我如何完全覆盖版本?

Luk*_*ett 5

您可以使用几乎没有记录的/p选项:

dotnet pack /p:PackageVersion=2.1.0
Run Code Online (Sandbox Code Playgroud)

https://docs.microsoft.com/en-us/dotnet/core/tools/dotnet-pack?tabs=netcore2x

显然,您可以在 CICD 工具中随意组合它,例如 VSTS:

/p:Version=$(Build.BuildNumber)
Run Code Online (Sandbox Code Playgroud)

注意当“pack”是动词时,VSTS 在 .NET Core 构建任务中有几个自动版本控制选项(在 2017 年 10 月 5 日预览)。

我在 VSTS 上的最终解决方案是使用 .NET Coredotnet pack任务Use the build number和以下设置作为构建定义选项中设置的构建号格式:

2.0.$(Build.BuildId)
Run Code Online (Sandbox Code Playgroud)

工程师将需要在进行大的或重大的更改时更改版本。我更喜欢代码中的这个;有一天我会写一些脚本来将数字从.csproj和提升到构建系统中。

  • 顺便说一句,您还可以定义 `/p:BuildNumber=$(Build.BuildId)` 然后在 csproj 中有一个 `<BuildNumer Condition="'$(BuildNumber)'==''">0</…>` 和`<Version>2.0.$(BuildNumber)</...>` 这样你就可以在 csproj 中设置一部分版本 (5认同)