You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 8程序集版本含额外信息,如何获取纯净包版本?

获取纯净的.NET程序集版本(去除源码修订哈希后缀)

当你在Git仓库中构建.NET项目时,默认会自动将源码提交的哈希值追加到AssemblyInformationalVersion的末尾,形成版本号+哈希的格式,这就是你看到额外后缀的原因。由于你无法要求所有客户端修改项目配置,只能在代码中对获取到的版本字符串进行处理,以下是几种可靠的实现方式:

方法一:字符串分割(无额外依赖)

直接按+符号分割版本字符串,取分割后的第一部分即可。这种方式简单高效,且不需要引入任何第三方包:

using System.Reflection;
using System.Linq;

var entryAssembly = Assembly.GetEntryAssembly();
if (entryAssembly == null)
{
    Console.WriteLine("无法获取入口程序集");
    return;
}

var infoVersionAttr = entryAssembly.GetCustomAttribute<AssemblyInformationalVersionAttribute>();
var cleanVersion = infoVersionAttr?.InformationalVersion?.Split('+').FirstOrDefault() ?? "Unknown";

Console.WriteLine(cleanVersion);

说明:

  • 加入了空值判断,避免因GetEntryAssembly返回null或属性不存在导致的空引用异常
  • 如果版本字符串没有+后缀(非Git环境构建或手动禁用了源码修订追加),Split('+').FirstOrDefault()会直接返回原版本号,不会破坏正常格式

方法二:使用NuGet版本解析(可选,需引入依赖)

如果你希望更严谨地处理符合SemVer规范的版本号,可以引入NuGet.Versioning包,通过其NuGetVersion类解析版本:

  1. 先在类库项目中安装NuGet包:
Install-Package NuGet.Versioning
  1. 编写解析代码:
using System.Reflection;
using NuGet.Versioning;

var entryAssembly = Assembly.GetEntryAssembly();
if (entryAssembly == null)
{
    Console.WriteLine("无法获取入口程序集");
    return;
}

var infoVersionAttr = entryAssembly.GetCustomAttribute<AssemblyInformationalVersionAttribute>();
if (NuGetVersion.TryParse(infoVersionAttr?.InformationalVersion, out var nuGetVersion))
{
    // 获取包含预发布标签的纯净版本号(如1.2.3-alpha)
    var cleanVersion = $"{nuGetVersion.Major}.{nuGetVersion.Minor}.{nuGetVersion.Patch}{nuGetVersion.Release}";
    Console.WriteLine(cleanVersion);
}
else
{
    Console.WriteLine("版本格式解析失败");
}

说明:

  • 这种方式更适合需要对版本号进行复杂操作(如比较、提取版本段)的场景
  • 缺点是需要引入额外的NuGet依赖,若你的类库追求轻量,方法一更合适

内容的提问来源于stack exchange,提问作者bN_

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 14:02:24