.Net core 为exe增加版本号信息

给发布的exe文件增加版本号概念,方便进行版本管理。 

在解决方案路径下增加AssemblyInfo.template.cs文件。内容如下

using System;
using System.Reflection;
using System.Runtime.InteropServices;

// 程序集的版本信息由下列四个值组成: 
//
//      主版本
//      次版本
//      生成号
//      修订号
//
//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值,
// 方法是按如下所示使用“*”: :
// [assembly: AssemblyVersion("1.0.*")]

[assembly: AssemblyVersion("2.4.0.$WCLOGCOUNT-1046$")]
[assembly: AssemblyFileVersion("2.4.0.$WCLOGCOUNT-1046$")]

[assembly: AssemblyBuildBranch("$WCBRANCH$")]
[assembly: AssemblyBuildDate("$WCNOW$")]
[assembly: AssemblyBuildHash("$WCREV=7$")]
[assembly: AssemblyWCMODS("$WCMODS?1:0$")]



[AttributeUsage(AttributeTargets.Assembly)]
public class AssemblyBuildBranch : Attribute
{
    public string text;
    public AssemblyBuildBranch() : this(string.Empty) { }
    public AssemblyBuildBranch(string version) { text = version; }
}


[AttributeUsage(AttributeTargets.Assembly)]
public class AssemblyBuildDate : Attribute
{
    public string text;
    public AssemblyBuildDate() : this(string.Empty) { }
    public AssemblyBuildDate(string version) { text = version; }
}


[AttributeUsage(AttributeTargets.Assembly)]
public class AssemblyBuildHash : Attribute
{
    public string text;
    public AssemblyBuildHash() : this(string.Empty) { }
    public AssemblyBuildHash(string version) { text = version; }
}
[AttributeUsage(AttributeTargets.Assembly)]
public class AssemblyWCMODS : Attribute
{
    public string text;
    public AssemblyWCMODS() : this(string.Empty) { }
    public AssemblyWCMODS(string version) { text = version; }
}

在exe对应项目的生成的生成前事件(预生成事件),增加GitWCRev $(SolutionDir) $(SolutionDir)AssemblyInfo.template.cs  $(SolutionDir)GlobalAssemblyInfo.cs

然后生成解决方案,然后会生成一个

在文件属性中可以看到版本信息

在program.cs获取版本号信息代码:

ver.version = Assembly.G ver.buildDate = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyBuildDate), false).Cast<AssemblyBuildDate>().First().text;//获取版本号
ver.buildBranch = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyBuildBranch), false).Cast<AssemblyBuildBranch>().First().text;
ver.buildHash = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyBuildHash), false).Cast<AssemblyBuildHash>().First().text;
ver.wcmods = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyWCMODS), false).Cast<AssemblyWCMODS>().First().text;etExecutingAssembly().GetName().Version.ToString();

在使用 Git 提交 .NET 代码时,希望在提交过程中自动增加版本号,可以通过集成 GitVersion 工具来实现。GitVersion 是一个能够根据 Git 提交历史自动生成语义化版本号的工具,特别适用于 .NET 项目。 ### 配置步骤 1. **安装 GitVersion** 可以通过 NuGet 安装 GitVersion 的 MSBuild 集成包,即 `GitVersionTask`。对于 .NET Core 项目,目前仅支持 GitVersionTask 4.0 及以上版本(目前为 beta 版本)[^1]。可以通过以下命令安装: ```bash dotnet add package GitVersionTask ``` 2. **配置项目文件** 在 `.csproj` 文件中启用 GitVersion 支持,确保项目文件中包含以下内容: ```xml <PropertyGroup> <UseGitVersion>true</UseGitVersion> </PropertyGroup> ``` GitVersion 会根据提交历史、分支策略和标签信息自动计算版本号,并将其注入到项目的 `AssemblyInfo.cs` 文件中。 3. **使用 MSBuild 构建项目** 由于当前版本的 GitVersionTask 对 `dotnet build` 的支持尚不完善,建议使用基于 .NET Framework 的 `msbuild` 来构建项目,以避免构建失败的问题 [^1]。 4. **提交代码时自动更新版本号** GitVersion 会在每次构建时根据 Git 提交历史更新版本号。如果希望在提交代码时立即生效,可以在 CI/CD 管道中配置自动构建任务,确保每次提交后都会触发版本号更新。 5. **版本号格式** GitVersion 默认使用语义化版本号格式,例如 `1.0.0-alpha.1`、`1.0.0-beta.2`、`1.0.0` 等。可以通过 `GitVersion.yml` 文件自定义版本号生成策略,例如基于分支名称的版本控制。 ### 示例配置文件 `GitVersion.yml` 以下是一个简单的 `GitVersion.yml` 配置示例,用于定义不同分支的版本策略: ```yaml mode: ContinuousDeployment branches: main: tag: '' increment: Patch develop: tag: beta increment: Minor ignore: sha: [] ``` 此配置表示: - `main` 分支使用无标签的版本号,并在每次提交时增加 `Patch` 版本。 - `develop` 分支使用 `beta` 标签,并在每次提交时增加 `Minor` 版本。 ### 注意事项 - GitVersionTask 的当前版本对 .NET Core 的支持仍处于 beta 阶段,可能存在兼容性问题 [^1]。 - 如果项目使用 `dotnet build` 构建失败,建议切换到基于 .NET Framework 的 `msbuild`,或等待 GitTools 团队发布正式版本。 - 为了确保版本号的准确性,建议在团队中统一 Git 提交规范,例如使用 `Conventional Commits` 标准。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值