C#获取程序集信息

本文介绍了一种在C#中获取.NET程序集版本信息的方法,包括主程序集及其引用的程序集版本,利用反射机制实现。同时对比了C#生成的.NET DLL与C++生成的DLL的不同。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

软件安装的点过多,有时候为特定某些点更新程序,而其它可能不更新,为了便于维护就加了个对话框,来显示当前软件的所有程序集版本,方便随时查看,或者将信息上传到服务器便于统一管理。

C#生成的.net DLL程序集与C++成生的DLL共享库作用是一样的,但其本质是不同的,C#生成的DLL包含的是中间语言IL,其实只是与C#更低级一些的高级语言,并不是机器码,而C++生成的DLL动态库却是机器码,这导致两者的表现也不同,例如使用System.Diagnostics.Process.Modules得不到.net 动态库的信息,而只能得到主程序模块,代码为:

foreach (ProcessModule m in Process.GetCurrentProcess().Modules) {
FileInfo f = new FileInfo(m.FileName);
sb.AppendFormat("{0}/t/t{1}/t/t{2}/t/t({3})"
, m.ModuleName, m.FileVersionInfo.FileVersion.ToString()
, f.LastWriteTime, m.FileName);
sb.AppendLine();
}

而如果想获取.NET程序集则需要用别的方法:

System.Reflection.Assembly ma = System.Reflection.Assembly.GetEntryAssembly();
FileInfo fi = new FileInfo(ma.Location);
FileVersionInfo mfv = FileVersionInfo.GetVersionInfo(ma.Location);
System.Reflection.Module mm = ma.ManifestModule;
sb.AppendFormat("{0}/t {1}/t {2}/t {3}({4})",
mm.Name,
ma.GetName().Version, // 这个是在工程的属性里设置的Assembly Version
fi.LastWriteTime, ma.Location
, mfv.FileVersion); // 这个是在工程的属性里设置的File Version
sb.AppendLine();

foreach (var aName in ma.GetReferencedAssemblies()) {
Assembly a = Assembly.Load(aName);
FileInfo f = new FileInfo(a.Location);
FileVersionInfo fv = FileVersionInfo.GetVersionInfo(a.Location);
System.Reflection.Module m = a.ManifestModule;
sb.AppendFormat("{0}/t {1}/t {2}/t {3}({4})"
, m.Name, a.GetName().Version, f.LastWriteTime, a.Location, fv.FileVersion);
sb.AppendLine();
}

通过反射机制,首先获取主程序集,然后获取它引用的程序集的信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值