如何以编程方式获取.NET Core核心类库DLL的版本号?
获取Windows核心DLL版本号的正确姿势
嘿,我之前也踩过这个坑!那些api-ms-win-core-console-l1-1-0.dll这类文件并不是.NET程序集,而是Windows平台的原生系统DLL(属于Windows API集的一部分),所以你用.NET Reflection里的AssemblyName.GetAssemblyName()方法肯定会报错——这类DLL根本没有.NET程序集清单,反射方法只适用于真正的.NET类库。
靠谱的解决方案:用FileVersionInfo读取文件版本
针对原生DLL,我们可以直接读取文件本身携带的版本元数据,不需要加载程序集。下面是可以直接运行的示例代码:
using System.Diagnostics; // 需要引用这个命名空间 string file = @"C:\dotnet_core_lib\api-ms-win-core-console-l1-1-0.dll"; FileVersionInfo fileVersionInfo = FileVersionInfo.GetVersionInfo(file); // 获取完整的文件版本字符串 string fullVersion = fileVersionInfo.FileVersion; // 或者单独获取版本的各个部分 int major = fileVersionInfo.FileMajorPart; int minor = fileVersionInfo.FileMinorPart; int build = fileVersionInfo.FileBuildPart; int revision = fileVersionInfo.FilePrivatePart; Console.WriteLine($"完整版本号:{fullVersion}"); Console.WriteLine($"拆分版本:{major}.{minor}.{build}.{revision}");
为什么这个方法能行?
FileVersionInfo是直接读取PE文件(Windows可执行文件/DLL)的版本资源段,不需要把整个DLL加载到内存,也完全不依赖.NET程序集的结构。- 不管是你提到的那些核心系统DLL,还是普通的Windows原生程序,这个方法都能稳定获取版本信息。
小补充
如果需要获取和Windows系统版本关联的产品版本,还可以用fileVersionInfo.ProductVersion属性,它返回的是该DLL所属的Windows组件版本。
内容的提问来源于stack exchange,提问作者RPrashant
相关产品推荐
相关产品推荐

