C# 如何获取程序集(Assembly)版本信息 - 反射的应用

来源:这里教程网 时间:2026-02-21 17:35:28 作者:

在 C# 中,获取程序集(Assembly)的版本信息最常用、最直接的方式就是利用 反射(Reflection),通过

Assembly
类及其相关属性实现。核心在于拿到当前或指定程序集的
Assembly
实例,再读取其
GetName().Version
或其他元数据属性。

获取当前程序集的版本号

这是最常见场景,比如在日志、About 窗口或 API 响应中显示本程序版本:

使用
Assembly.GetExecutingAssembly()
获取当前正在执行的程序集(即包含该调用代码的 .dll 或 .exe)
调用
.GetName().Version
得到
Version
对象,可直接转为字符串(如
v.ToString()
也可分别访问
Major
Minor
Build
Revision
四个整数字段

示例代码:

var version = Assembly.GetExecutingAssembly().GetName().Version;
Console.WriteLine($"版本:{version}"); // 输出如 1.2.3.4
Console.WriteLine($"主版本:{version.Major}");

获取入口程序集(主程序)的版本

适用于类库中需要知道宿主应用(如 WinForm、ASP.NET Core 主项目)版本的情况:

Assembly.GetEntryAssembly()
获取启动当前进程的程序集
注意:在某些上下文(如单元测试、某些插件环境)中可能返回
null
,需判空

示例:

var entry = Assembly.GetEntryAssembly();
if (entry != null)
  Console.WriteLine($"主程序版本:{entry.GetName().Version}");

获取指定类型所在程序集的版本

当你有一个类型(

Type
),想查它定义在哪个程序集及该程序集的版本:

通过
typeof(SomeClass).Assembly
或实例的
GetType().Assembly
拿到程序集
再调用
.GetName().Version
即可

示例:

var version = typeof(Program).Assembly.GetName().Version;
// 或 var version = obj.GetType().Assembly.GetName().Version;

读取更完整的程序集元数据(标题、描述、公司等)

除了版本号,常需获取

AssemblyTitle
AssemblyDescription
等友好名称,这些来自程序集特性(Assembly Attributes):

使用
GetCustomAttribute<t>()</t>
方法读取如
AssemblyTitleAttribute
需引用
System.Reflection
,且确保对应特性已在
AssemblyInfo.cs
(或
.csproj
<propertygroup></propertygroup>
)中设置

示例:

var assembly = Assembly.GetExecutingAssembly();
var title = assembly.GetCustomAttribute()?.Title ?? "未知标题";
var desc = assembly.GetCustomAttribute()?.Description ?? "";

基本上就这些。反射获取版本不复杂但容易忽略细节,比如混淆

GetExecuting
GetEntry
、忘记判空、或误以为
Version
字符串格式固定(实际可能缺省 Revision)。按需选择合适方式,再加点防御性代码,就能稳稳拿到想要的信息。

相关推荐