C#/.NET-如何自动生成和增加软件包版本,尤其是通过CI?
我有一个VisualStudio项目,它是作为NuGet lib包构建的。但每次发布包时,我都必须手动更改版本号。这是一个容易出错的工作。 我想自动生成并增加软件包版本号C#/.NET-如何自动生成和增加软件包版本,尤其是通过CI?,c#,.net,visual-studio,.net-core,nuget,C#,.net,Visual Studio,.net Core,Nuget,我有一个VisualStudio项目,它是作为NuGet lib包构建的。但每次发布包时,我都必须手动更改版本号。这是一个容易出错的工作。 我想自动生成并增加软件包版本号 我找到了解决这个问题的方法。我还找到了一些语义版本博客来解释连续交付的包版本 但不幸的是,这个软件包对我来说并不正确 它给我一个错误,AssemblyVersionAttribute重复 如果我将false添加到csproj文件中,它将不起任何作用,包版本将为0.0.0.0 可能是因为我使用了新的cspr
我找到了解决这个问题的方法。我还找到了一些语义版本博客来解释连续交付的包版本
但不幸的是,这个软件包对我来说并不正确
- 它给我一个错误,AssemblyVersionAttribute重复
- 如果我将
添加到csproj文件中,它将不起任何作用,包版本将为0.0.0.0false
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>net45;net47;netstandard2.0</TargetFrameworks>
</PropertyGroup>
</Project>
net45;net47;netstandard2.0
如蒙答复,不胜感激
更新:
我发现有一个问题需要提及我的问题:。我正在尝试新的解决方案。不确定Jenkins的情况,但它应该能够自行生成一个增量数字或时间戳,可以通过构建管道上的环境变量进行访问 我认为最灵活的方法是在csproj中添加一个带有占位符的
PackageVersion
标记,然后构建管道可以更改该标记:
<PropertyGroup>
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
<PackageVersion>$(PackageVersion)</PackageVersion>
</PropertyGroup>
实际上,
GitVersionTask
并不难使用。您只需做以下几件事:
GitVersion.yml
的配置文件,其中包含一些键值我在回答我自己的问题,因为我刚刚写错了配置文件名。所以它不能正常工作
这是我的配置文件:
mode: ContinuousDelivery
increment: Inherit
tag-prefix: '[vV]'
source-branches: ['master', 'develop', 'hotfix']
branches:
master:
regex: master$
mode: ContinuousDelivery
tag: ''
increment: Patch
prevent-increment-of-merged-branch-version: true
track-merge-target: false
tracks-release-branches: false
is-release-branch: true
release:
regex: r(elease$|(eleases)?[-/])
mode: ContinuousDelivery
tag: beta
increment: Patch
prevent-increment-of-merged-branch-version: true
track-merge-target: false
tracks-release-branches: false
is-release-branch: true
feature:
regex: f(eatures)?[-/]
mode: ContinuousDeployment
tag: alpha
increment: Minor
prevent-increment-of-merged-branch-version: false
track-merge-target: false
tracks-release-branches: false
is-release-branch: false
我在这里发布了这个配置文件的内容:我们可以通过推送Git标记触发GitHub操作,我们可以读取Git标记名称作为版本。然后我们可以用这个版本生成NuGet包 有一个dotnet工具可以将Git标记作为版本读取并写入版本文件 在使用它之前,我们应该创建版本文件并导入版本文件 我们应该使用dotnet安装dotnetCampus.TagToVersion工具,并使用该工具将Git标记写入版本文件 步骤1: 将
目录.Build.props
文件添加到repo文件夹
将代码写入目录.Build.props
文件
步骤2:
创建名为build
的文件夹,并将Version.props
文件添加到此文件夹
将代码写入build\Version.props
文件
1.0.5
步骤3:
在.GitHub\workflows
文件夹中编写GitHub操作配置文件,例如创建.GitHub\workflows\push标记和pack nuget.yml
文件
通过标签推送触发动作
关于:
推送:
标签:
- '*'
通过dotnet工具以版本形式写入标记
-名称:安装dotnet工具
运行:dotnet工具安装-g dotnetCampus.TagToVersion
-名称:将标记设置为版本
运行:dotnettagtoversion-t${{github.ref}
构建包
#构建和发布
-名称:使用dotnet构建
运行:dotnet构建--配置发布
-名称:安装Nuget
用法:nuget/setup-nuget@v1
与:
nuget版本:“5.x”
-名称:将私有GitHub注册表添加到NuGet
运行:|
nuget sources添加-name github-Sourcehttps://nuget.pkg.github.com/ORGANIZATION_NAME/index.json -用户名组织名称-密码${{secrets.GITHUB\u令牌}
-名称:将生成的包推送到GitHub注册表
运行:|
nuget push。\bin\release\*.nupkg-Source github-SkipDuplicate
nuget push。\bin\release\*.nupkg-源https://api.nuget.org/v3/index.json -SkipDuplicate-ApiKey${{secrets.NugetKey}}-NoSymbols
请参见这是否仅供本地使用?一般来说,这应该是远程构建器(Jenkins/Travis等)的工作it@information_interchange它主要是通过Jenkins使用的,有一个叫做GitVersion的有用工具,可以基于git计算版本控制tags@AluanHaddad正如我在问题中提到的,我尝试过GitVersion,但它不能正常工作。我猜它可能不支持.NET Core的新的*.csproj文件格式。@AluanHaddad GitVersion成功了!很抱歉,我使用了不正确的配置文件。(我将在官方文档中提到它。)如果所有版本值都来自构建管道,那么如何在每个开发人员的PC上正确构建它?@walterlv它可以工作,因为当标记为空时,nupkg的版本默认为标记。在dev PC上显示为空,默认为数字,如果没有标记,则默认为1.0.0
mode: ContinuousDelivery
increment: Inherit
tag-prefix: '[vV]'
source-branches: ['master', 'develop', 'hotfix']
branches:
master:
regex: master$
mode: ContinuousDelivery
tag: ''
increment: Patch
prevent-increment-of-merged-branch-version: true
track-merge-target: false
tracks-release-branches: false
is-release-branch: true
release:
regex: r(elease$|(eleases)?[-/])
mode: ContinuousDelivery
tag: beta
increment: Patch
prevent-increment-of-merged-branch-version: true
track-merge-target: false
tracks-release-branches: false
is-release-branch: true
feature:
regex: f(eatures)?[-/]
mode: ContinuousDeployment
tag: alpha
increment: Minor
prevent-increment-of-merged-branch-version: false
track-merge-target: false
tracks-release-branches: false
is-release-branch: false