如何将GitVersion版本信息嵌入C#.NET应用程序二进制文件?
给C# .NET应用集成GitVersion实现自动版本更新
1. 安装GitVersion
- 全局安装.NET工具(适配本地开发场景):
dotnet tool install --global GitVersion.Tool - 或给项目添加
GitVersion.MsBuildNuGet包(适合团队统一配置):dotnet add package GitVersion.MsBuild
2. 生成GitVersion配置文件
在Git仓库根目录执行初始化命令,生成GitVersion.yml配置文件:
dotnet-gitversion init
可根据项目分支策略、版本规则修改该文件,比如调整预发布版本格式、主分支匹配规则等。
3. 构建时自动注入版本信息
方式一:MsBuild包自动处理
若安装了GitVersion.MsBuild,构建过程中GitVersion会自动计算版本,并注入以下MSBuild属性:
GitVersion_SemVer:完整语义化版本(如1.2.3-beta.1+abc123)GitVersion_MajorMinorPatch:主版本.次版本.修订号(如1.2.3)GitVersion_InformationalVersion:包含元数据的详细版本
项目会自动用这些值填充Version、AssemblyVersion等属性,无需额外配置。
方式二:全局工具手动配置MSBuild目标
若使用全局工具,需在.csproj中添加目标,调用GitVersion并设置版本属性:
<Target Name="InjectGitVersion" BeforeTargets="CoreCompile"> <Exec Command="dotnet-gitversion /output buildserver" ConsoleToMsBuild="true" /> <PropertyGroup> <Version>$(GitVersion_SemVer)</Version> <AssemblyVersion>$(GitVersion_Major).$(GitVersion_Minor).$(GitVersion_Patch).0</AssemblyVersion> <FileVersion>$(GitVersion_Major).$(GitVersion_Minor).$(GitVersion_Patch).$(GitVersion_BuildMetaData)</FileVersion> <InformationalVersion>$(GitVersion_InformationalVersion)</InformationalVersion> </PropertyGroup> </Target>
4. 实现-V选项显示版本
在应用入口(如Program.cs)中添加命令行参数判断,读取程序集版本信息:
using System.Reflection; var args = Environment.GetCommandLineArgs(); if (args.Contains("-V") || args.Contains("--version")) { var assembly = Assembly.GetExecutingAssembly(); var assemblyVersion = assembly.GetName().Version?.ToString() ?? "未知版本"; var infoVersion = assembly.GetCustomAttribute<AssemblyInformationalVersionAttribute>()?.InformationalVersion; Console.WriteLine($"版本: {assemblyVersion}"); if (!string.IsNullOrWhiteSpace(infoVersion)) { Console.WriteLine($"详细版本: {infoVersion}"); } return 0; } // 应用核心逻辑...
5. 验证效果
- 执行构建:
dotnet build - 运行应用查看版本:
dotnet run -- -V
此时会输出GitVersion根据Git提交记录计算出的当前版本,每次构建都会自动更新版本值。
内容的提问来源于stack exchange,提问作者Bart Friederichs
相关产品推荐
相关产品推荐

