C#/ .NET - 如何自动生成和增加包版本,尤其是通过CI?

wal*_*rlv 10 .net c# visual-studio nuget .net-core

我有一个Visual Studio项目,它是作为NuGet lib包构建的.但每次我发布包时,我都必须手动更改版本号.这是一个容易出错的工作.我想自动生成并增加包版本号.


我找到了GitVersion工具来解决这个问题.我还发现了一些语义版本博客来解释持续交付的包版本.


但不幸的是,GitVersion包对我来说无法正常工作.

  • 它给出了一个错误,即AssemblyVersionAttribute是重复的.
  • 如果我添加<GenerateAssemblyInfo>false</GenerateAssemblyInfo>到csproj文件中,它将不执行任何操作,包版本将为0.0.0.0.

也许原因是我正在使用新的csproj格式.看到这里查看csproj文件,文件如下所示:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFrameworks>net45;net47;netstandard2.0</TargetFrameworks>
  </PropertyGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)

任何回复表示赞赏.


更新:

我发现有一个问题需要提一下我的问题:VS2017式csproj的Gitversion任务·问题#1349·GitTools/GitVersion.我正在尝试新的解决方案.

the*_*000 3

不确定 Jenkins,但它应该能够自行生成增量数字或时间戳,可以通过构建管道上的环境变量进行访问。

我认为最灵活的方法是将PackageVersion带有占位符的标签添加到您的 csproj,然后您的构建管道可以更改:

  <PropertyGroup>
    <GeneratePackageOnBuild>True</GeneratePackageOnBuild>
    <PackageVersion>$(PackageVersion)</PackageVersion>
  </PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

因此,在构建管道上,您只需传递版本,例如:

dotnet build -p:PackageVersion=$(BUILD_TIMESTAMP)
Run Code Online (Sandbox Code Playgroud)