C# 如何获取程序集(Assembly)版本信息 - 反射的应用
发布时间 - 2025-12-26 00:00:00 点击率:次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()?.Title ?? "未知标题";
var desc = assembly.GetCustomAttribute()?.Description ?? "";
基本上就这些。反射获取版本不复杂但容易忽略细节,比如混淆 GetExecuting 和 GetEntry、忘记判空、或误以为 Version 字符串格式固定(实际可能缺省 Revision)。按需选择合适方式,再加点防御性代码,就能稳稳拿到想要的信息。
# win
# c#
# .net
# NULL
# if
# 字符串
# Reflection
# var
# console
# 对象
# typeof
# 主程序
# 最常用
# 这是
# 就能
# 当你
# 适用于
# 也可
# 或其他
# 已在
# 可直接
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
智能起名网站制作软件有哪些,制作logo的软件?
Laravel怎么使用artisan命令缓存配置和视图
Python自动化办公教程_ExcelWordPDF批量处理案例
Laravel如何实现URL美化Slug功能_Laravel使用eloquent-sluggable生成别名【方法】
Laravel怎么实现搜索功能_Laravel使用Eloquent实现模糊查询与多条件搜索【实例】
Android自定义listview布局实现上拉加载下拉刷新功能
Laravel Seeder填充数据教程_Laravel模型工厂Factory使用
Laravel如何处理文件下载请求?(Response示例)
Laravel怎么实现API接口鉴权_Laravel Sanctum令牌生成与请求验证【教程】
Laravel如何配置任务调度?(Cron Job示例)
三星、SK海力士获美批准:可向中国出口芯片制造设备
西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?
电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?
Laravel路由怎么定义_Laravel核心路由系统完全入门指南
PHP正则匹配日期和时间(时间戳转换)的实例代码
怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?
图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?
如何快速搭建高效简练网站?
EditPlus 正则表达式 实战(3)
打开php文件提示内存不足_怎么调整php内存限制【解决方案】
如何快速搭建FTP站点实现文件共享?
北京网站制作公司哪家好一点,北京租房网站有哪些?
太平洋网站制作公司,网络用语太平洋是什么意思?
HTML5空格在Angular项目里怎么处理_Angular中空格的渲染问题【详解】
小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?
javascript中的数组方法有哪些_如何利用数组方法简化数据处理
Laravel distinct去重查询_Laravel Eloquent去重方法
PythonWeb开发入门教程_Flask快速构建Web应用
如何为不同团队 ID 动态生成多个独立按钮
Laravel怎么配置不同环境的数据库_Laravel本地测试与生产环境动态切换【方法】
laravel怎么配置Redis作为缓存驱动_laravel Redis缓存配置教程
iOS验证手机号的正则表达式
,南京靠谱的征婚网站?
如何在建站之星绑定自定义域名?
Laravel如何使用软删除(Soft Deletes)功能_Eloquent软删除与数据恢复方法
JavaScript如何实现音频处理_Web Audio API如何工作?
php结合redis实现高并发下的抢购、秒杀功能的实例
教你用AI润色文章,让你的文字表达更专业
javascript中数组(Array)对象和字符串(String)对象的常用方法总结
教你用AI将一段旋律扩展成一首完整的曲子
javascript如何操作浏览器历史记录_怎样实现无刷新导航
简单实现Android文件上传
如何快速搭建个人网站并优化SEO?
如何在局域网内绑定自建网站域名?
javascript基于原型链的继承及call和apply函数用法分析
如何基于云服务器快速搭建网站及云盘系统?
东莞专业网站制作公司有哪些,东莞招聘网站哪个好?
如何在IIS服务器上快速部署高效网站?
Laravel如何保护应用免受CSRF攻击?(原理和示例)
Laravel如何实现多级无限分类_Laravel递归模型关联与树状数据输出【方法】

