从C#中检索程序集的MVID?

8
如何使用C#反射检索.NET程序集的模块版本标识符(MVID)?

请确定.NET程序集是否来自同一源代码。 - Kumar
2个回答

12
应该是:
var myAssembly = Assembly.GetExecutingAssembly(); //or whatever
var mvid = myAssembly.ManifestModule.ModuleVersionID;

一个程序集中可能会有其他模块,但ManifestModule是“标识”程序集本身的模块。


5

下面是一个示例,它不使用Reflection来加载程序集,而是使用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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接