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 】
相关推荐:
如何快速搭建FTP站点实现文件共享?
Gemini手机端怎么发图片_Gemini手机端发图方法【步骤】
如何获取上海专业网站定制建站电话?
Laravel如何实现全文搜索功能?(Scout和Algolia示例)
大型企业网站制作流程,做网站需要注册公司吗?
如何快速选择适合个人网站的云服务器配置?
Laravel如何记录自定义日志?(Log频道配置)
新三国志曹操传主线渭水交兵攻略
如何在景安服务器上快速搭建个人网站?
javascript日期怎么处理_如何格式化输出
VIVO手机上del键无效OnKeyListener不响应的原因及解决方法
Laravel怎么配置自定义表前缀_Laravel数据库迁移与Eloquent表名映射【步骤】
JavaScript如何实现类型判断_typeof和instanceof有什么区别
详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)
制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?
高端建站三要素:定制模板、企业官网与响应式设计优化
Python文本处理实践_日志清洗解析【指导】
php静态变量怎么调试_php静态变量作用域调试技巧【解答】
Laravel如何使用Scope本地作用域_Laravel模型常用查询逻辑封装技巧【手册】
C#如何调用原生C++ COM对象详解
如何登录建站主机?访问步骤全解析
为什么php本地部署后css不生效_静态资源加载失败修复技巧【技巧】
如何快速启动建站代理加盟业务?
Laravel如何实现数据导出到CSV文件_Laravel原生流式输出大数据量CSV【方案】
php485函数参数是什么意思_php485各参数详细说明【介绍】
东莞专业网站制作公司有哪些,东莞招聘网站哪个好?
如何快速搭建高效香港服务器网站?
Laravel如何实现API版本控制_Laravel API版本化路由设计策略
如何用JavaScript实现文本编辑器_光标和选区怎么处理
android nfc常用标签读取总结
php json中文编码为null的解决办法
Laravel项目怎么部署到Linux_Laravel Nginx配置详解
HTML透明颜色代码怎么让图片透明_给img元素加透明色的技巧【方法】
Laravel如何使用Service Provider服务提供者_Laravel依赖注入与容器绑定【深度】
Laravel Sail是什么_基于Docker的Laravel本地开发环境Sail入门
如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?
Laravel如何生成PDF或Excel文件_Laravel文档导出工具与使用教程
如何用VPS主机快速搭建个人网站?
弹幕视频网站制作教程下载,弹幕视频网站是什么意思?
大学网站设计制作软件有哪些,如何将网站制作成自己app?
Laravel如何实现API版本控制_Laravel版本化API设计方案
油猴 教程,油猴搜脚本为什么会网页无法显示?
如何自定义safari浏览器工具栏?个性化设置safari浏览器界面教程【技巧】
,怎么在广州志愿者网站注册?
googleplay官方入口在哪里_Google Play官方商店快速入口指南
Python自然语言搜索引擎项目教程_倒排索引查询优化案例
JS中对数组元素进行增删改移的方法总结
谷歌浏览器下载文件时中断怎么办 Google Chrome下载管理修复
长沙做网站要多少钱,长沙国安网络怎么样?
Laravel如何连接多个数据库_Laravel多数据库连接配置与切换教程

