【发布时间】:2011-03-03 15:38:09
【问题描述】:
如何在 c# 中使用反射检索 .NET 程序集的模块版本标识符 (MVID)?
【问题讨论】:
-
看看有没有帮助 - stackoverflow.com/questions/2940857/…
标签: c# .net reflection
如何在 c# 中使用反射检索 .NET 程序集的模块版本标识符 (MVID)?
【问题讨论】:
标签: c# .net reflection
应该是:
var myAssembly = Assembly.GetExecutingAssembly(); //or whatever
var mvid = myAssembly.ManifestModule.ModuleVersionID;
程序集中可以有其他模块,但 ManifestModule 将是“标识”程序集本身的模块。
【讨论】:
这是一个不使用反射来加载程序集而是使用System.Reflection.Metadata 的示例:
using (var stream = File.OpenRead(filePath))
{
PEReader reader = new PEReader(stream);
var metadataReader = reader.GetMetadataReader();
var mvidHandle = metadataReader.GetModuleDefinition().Mvid;
var mvid = metadataReader.GetGuid(mvidHandle);
}
这是使用Mono.Cecil的示例:
var module = Mono.Cecil.ModuleDefinition.ReadModule(filePath);
var mvid = module.Mvid;
下面是一个独立代码示例,用于读取 MVID 且没有任何依赖关系。它是单个文件中 Mono.Cecil 的精简版: https://github.com/KirillOsenkov/MetadataTools/blob/master/src/PEFile/ImageReader.cs
【讨论】: