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

.NET 8中无需修改入口程序集属性获取包版本的方法

问题描述

我开发了一个NuGet包,需要获取入口程序集的包版本。此前使用以下方法获取版本:

using System.Reflection;

var version = Assembly.GetEntryAssembly()
    .GetCustomAttribute<AssemblyInformationalVersionAttribute>()
    .InformationalVersion;

Console.WriteLine(version);

该方法原本能正常返回入口程序集的纯包版本,但由于.NET 8中InformationalVersion存在破坏性变更,现在会在版本后追加SourceRevisionId。例如,原本期望得到1.2.3-alpha,实际得到1.2.3-alpha+9d1761b41223159ec45d7d492e08820f706d7ad1。

我知道可以在入口程序集的csproj中添加<IncludeSourceRevisionInInformationalVersion>false</IncludeSourceRevisionInInformationalVersion>来解决,但我的包被多个客户端使用,不想让所有客户端都修改项目。我需要一种获取纯包版本的方式,请问除了截断+号后的字符串外,有没有更合适的方法?

可行方案

除了截断+号后的内容,还有几种更规范的方式获取纯包版本:

1. 读取AssemblyVersion或AssemblyFileVersion属性

如果客户端项目的程序集版本与包版本对齐,可以直接读取这两个属性:

using System.Reflection;

// 获取AssemblyVersion
var assemblyVersion = Assembly.GetEntryAssembly()?.GetName().Version?.ToString();

// 获取AssemblyFileVersion
var fileVersion = Assembly.GetEntryAssembly()?
    .GetCustomAttribute<AssemblyFileVersionAttribute>()?.Version;

注意:AssemblyVersion默认会自动递增修订号,需要客户端显式设置固定版本才能和包版本完全一致;AssemblyFileVersion则需要手动指定才能对齐包版本。

2. 基于SemVer规范解析版本

如果必须从InformationalVersion获取,按照SemVer规范解析是更严谨的方式,而非简单截断。可以手动实现基础解析,或者使用成熟的SemVer解析库:

// 手动解析(符合SemVer规范,忽略+后的元数据)
var infoVersion = Assembly.GetEntryAssembly()
    .GetCustomAttribute<AssemblyInformationalVersionAttribute>()
    .InformationalVersion;
var pureVersion = infoVersion.Split('+')[0];

// 使用SemVer库解析(更健壮,支持复杂版本格式)
// 需先安装SemVer NuGet包
var semVer = new SemVer.Version(infoVersion);
var pureVersion = semVer.ToString(); // 自动过滤+后的元数据部分

3. 读取引用包的版本(针对NuGet包自身版本)

如果你的需求是获取客户端项目中引用的你的NuGet包版本,而非入口程序集的版本,可以通过程序集引用信息获取:

using System.Linq;
using System.Reflection;

var entryAssembly = Assembly.GetEntryAssembly();
var packageVersion = entryAssembly?.GetReferencedAssemblies()
    .FirstOrDefault(a => a.Name == "你的NuGet包名称")?
    .Version?.ToString();

内容的提问来源于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 01:52:07