AssemblyInformationalVersionAttribute用于为.NET程序集添加灵活的、信息性的版本标签,不影响运行时绑定,可包含预发布标识、Git哈希、构建号等丰富元数据,常用于CI/CD中实现版本追溯与自动化管理。

.NET中的
AssemblyInformationalVersionAttribute
AssemblyVersion
AssemblyFileVersion
AssemblyInformationalVersionAttribute
System.Reflection
AssemblyVersion
AssemblyFileVersion
AssemblyInformationalVersion
在软件开发中,尤其是在持续集成/持续部署(CI/CD)的流程里,我们经常需要一个能反映更多上下文信息的版本号。比如,我想知道用户反馈的某个Bug是哪个特定的内部构建版本产生的,或者哪个预发布版本正在测试中。如果只依赖
AssemblyVersion
AssemblyFileVersion
AssemblyInformationalVersionAttribute
这个问题常常困扰着初学者,甚至是一些经验丰富的开发者也容易混淆。我认为,理解它们各自的职责是关键。
AssemblyVersion
AssemblyVersion
AssemblyVersion
AssemblyVersion
AssemblyFileVersion
AssemblyVersion
AssemblyVersion
AssemblyFileVersion
AssemblyInformationalVersionAttribute
1.0.0-beta.2
2.0.0-rc.1
1.0.0+abcdef123
1.0.0-build.4567
MyProduct v3.1 (Internal Test Build)
它存在的意义,就在于提供一个既能满足人类阅读需求,又能包含丰富元数据的版本标识,同时又不会干扰到程序集的核心运行时行为。
设置和获取
AssemblyInformationalVersionAttribute
设置值:
对于旧的.NET Framework项目或非SDK风格项目(通常在Properties/AssemblyInfo.cs
AssemblyInfo.cs
[assembly: ...]
AssemblyInformationalVersion
using System.Reflection;
// ...
[assembly: AssemblyInformationalVersion("1.0.0-beta.3+commit.1a2b3c4d")]这种方式是直接硬编码,如果要动态生成,可能需要构建脚本去修改这个文件。
对于现代SDK风格的.NET项目(如.NET Core/.NET 5+项目,在.csproj
.csproj
<InformationalVersion>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<!-- 直接设置值 -->
<InformationalVersion>2.1.0-preview.5</InformationalVersion>
<!-- 或者,结合MSBuild属性动态生成,这在CI/CD中非常有用 -->
<!-- <InformationalVersion>$(VersionPrefix)-$(BuildNumber)</InformationalVersion> -->
</PropertyGroup>
<!-- ... 其他配置 -->
</Project>当项目构建时,MSBuild会自动从这个
<InformationalVersion>
AssemblyInformationalVersionAttribute
获取值:
在运行时获取
AssemblyInformationalVersionAttribute
获取当前执行程序集的信息:
using System;
using System.Reflection;
public class Program
{
public static void Main(string[] args)
{
Assembly currentAssembly = Assembly.GetExecutingAssembly();
string informationalVersion = currentAssembly
.GetCustomAttribute<AssemblyInformationalVersionAttribute>()?
.InformationalVersion;
Console.WriteLine($"当前应用程序版本: {informationalVersion ?? "未设置"}\n");
// 对于桌面应用(WPF/WinForms)或控制台应用,ProductVersion属性通常会映射到InformationalVersion
// 如果InformationalVersion未设置,它会回退到AssemblyVersion
Console.WriteLine($"Application.ProductVersion: {System.Windows.Forms.Application.ProductVersion}"); // 仅WinForms示例
// 或 Environment.Version 对于运行时版本,Application.ProductVersion 对于应用程序版本
}
}获取特定已加载程序集的信息: 如果你想获取一个已经加载到内存中的其他DLL或EXE的
AssemblyInformationalVersion
Assembly
// 假设你已经加载了名为 "YourLibrary.dll" 的程序集
// Assembly targetAssembly = Assembly.LoadFrom("path/to/YourLibrary.dll"); // 或 Assembly.Load("YourLibraryName");
// 假设我们这里就用当前程序集作为例子
Assembly targetAssembly = Assembly.GetExecutingAssembly(); // 替换成你实际要获取的Assembly
string targetInformationalVersion = targetAssembly
.GetCustomAttribute<AssemblyInformationalVersionAttribute>()?
.InformationalVersion;
Console.WriteLine($"目标程序集版本: {targetInformationalVersion ?? "未设置"}");通过这种方式,你的应用程序就可以在“关于”对话框、诊断日志或API响应中显示一个友好的、包含丰富信息的版本字符串,这对于用户支持和内部调试都非常有帮助。
这正是
AssemblyInformationalVersionAttribute
我的做法通常是这样的:
动态注入构建信息: 在CI/CD管道中,我可以利用环境变量、构建参数或脚本来动态生成
InformationalVersion
InformationalVersion
1.0.0-beta.1+abcdef123
1.0.0-build.4567
1.0.0-feature-xyz.20231027
通过MSBuild属性传递: 如前所述,在SDK风格的
.csproj
<PropertyGroup> <!-- 默认值,用于本地开发 --> <InformationalVersion Condition="'$(BUILD_BUILDNUMBER)' == ''">1.0.0-LocalDev</InformationalVersion> <!-- CI/CD环境会覆盖此值 --> <InformationalVersion Condition="'$(BUILD_BUILDNUMBER)' != ''">1.0.0-CI.$(BUILD_BUILDNUMBER)-$(GitCommitShortHash)</InformationalVersion> </PropertyGroup>
在CI/CD管道中执行
dotnet build
/p
dotnet build MyProject.csproj /p:BUILD_BUILDNUMBER=$(Build.BuildId) /p:GitCommitShortHash=$(Build.SourceVersion.Substring(0, 7))
使用专业的版本管理工具: 有一些工具,比如
Nerdbank.GitVersioning
AssemblyInformationalVersion
1.2.3-alpha.4+gfedcba
自动化版本管理的实际价值:
总之,
AssemblyInformationalVersionAttribute
以上就是.NET的AssemblyInformationalVersionAttribute类的作用是什么?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号