C#中获取程序集版本最常用方式是通过反射调用Assembly类属性:用GetExecutingAssembly()获当前程序集版本,GetEntryAssembly()获入口程序集版本(需判空),typeof(T).Assembly获指定类型所在程序集版本,并可用GetCustomAttribute读取 AssemblyTitle 等元数据。

在 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方法读取如() AssemblyTitleAttribute - 需引用
System.Reflection,且确保对应特性已在AssemblyInfo.cs(或.csproj的)中设置
示例:
var assembly = Assembly.GetExecutingAssembly();var title = assembly.GetCustomAttribute
var desc = assembly.GetCustomAttribute
基本上就这些。反射获取版本不复杂但容易忽略细节,比如混淆 GetExecuting 和 GetEntry、忘记判空、或误以为 Version 字符串格式固定(实际可能缺省 Revision)。按需选择合适方式,再加点防御性代码,就能稳稳拿到想要的信息。










