我有一个Visual Studio项目,它是作为NuGet lib包构建的。但每次我发布包时,我都必须手动更改版本号。这是一个容易出错的工作。 我想自动生成并增加软件包版本号。
我找到GitVersion tool来解决这个问题。我还发现了一些语义版本博客来解释持续交付的包版本。
但遗憾的是,GitVersion包对我来说无效。
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
添加到csproj文件中,它将不执行任何操作,包版本将为0.0.0.0。也许原因是我正在使用新的csproj格式。请参阅here以查看csproj文件,文件如下所示:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>net45;net47;netstandard2.0</TargetFrameworks>
</PropertyGroup>
</Project>
感谢任何回复。
更新:
我发现有一个问题需要提及我的问题:Gitversion Task for VS2017-style csproj · Issue #1349 · GitTools/GitVersion。我正在尝试新的解决方案。
答案 0 :(得分:2)
我们可以通过按下Git标签触发GitHub Action,并且可以读取Git标签名称作为版本。然后,我们可以使用此版本生成NuGet软件包。
有一个dotnet工具可以读取Git标签作为版本并将其写入版本文件。
在使用它之前,我们应该创建版本文件并导入版本文件。
我们应该使用dotnet安装dotnetCampus.TagToVersion工具,并使用该工具将Git标记写入版本文件。
第1步:
将Directory.Build.props
文件添加到repo文件夹。
将代码写入Directory.Build.props
文件。
<Project>
<Import Project="build\Version.props" />
</Project>
第2步:
制作一个名为build
的文件夹,并将Version.props
文件添加到该文件夹。
将代码写入build\Version.props
文件。
<Project>
<PropertyGroup>
<Version>1.0.5</Version>
</PropertyGroup>
</Project>
第3步:
在.github\workflows
文件夹中编写GitHub Action配置文件,例如创建.github\workflows\push tag and pack nuget.yml
文件
通过标签推送使Action触发。
on:
push:
tags:
- '*'
通过dotnet工具将标记写入版本。
- name: Install dotnet tool
run: dotnet tool install -g dotnetCampus.TagToVersion
- name: Set tag to version
run: dotnet TagToVersion -t ${{ github.ref }}
构建程序包
# Build and publish
- name: Build with dotnet
run: dotnet build --configuration Release
- name: Install Nuget
uses: nuget/setup-nuget@v1
with:
nuget-version: '5.x'
- name: Add private GitHub registry to NuGet
run: |
nuget sources add -name github -Source https://nuget.pkg.github.com/ORGANIZATION_NAME/index.json -Username ORGANIZATION_NAME -Password ${{ secrets.GITHUB_TOKEN }}
- name: Push generated package to GitHub registry
run: |
nuget push .\bin\release\*.nupkg -Source github -SkipDuplicate
nuget push .\bin\release\*.nupkg -Source https://api.nuget.org/v3/index.json -SkipDuplicate -ApiKey ${{ secrets.NugetKey }} -NoSymbols
请参见https://github.com/dotnet-campus/dotnetCampus.TagToVersion
答案 1 :(得分:1)
不确定Jenkins,但它应该能够生成一个增量数字或时间戳,可以通过构建管道上的环境变量访问。
我认为最灵活的方法是在csproj中添加一个带有占位符的PackageVersion
标记,然后您的构建管道可以更改:
<PropertyGroup>
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
<PackageVersion>$(PackageVersion)</PackageVersion>
</PropertyGroup>
因此,在构建管道上,您只需传递版本,例如:
dotnet build -p:PackageVersion=$(BUILD_TIMESTAMP)
答案 2 :(得分:0)
实际上GitVersionTask
并不难使用。你应该做的就是以下这些:
GitVersionTask
。GitVersion.yml
的配置文件,其中包含一些键值。执行此操作后,您可以找到输出dll文件包含语义版本。
我正在回答我自己的问题,因为我刚写了错误的配置文件名。所以它无法正常工作。
这是我的配置文件:
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
我在此处发布了此配置文件内容:Automatically increase the semantic version using GitVersion - walterlv