Kei*_*thS 10
应该:
var myAssembly = Assembly.GetExecutingAssembly(); //or whatever
var mvid = myAssembly.ManifestModule.ModuleVersionID;
Run Code Online (Sandbox Code Playgroud)
程序集中可以有其他模块,但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);
}
Run Code Online (Sandbox Code Playgroud)
这是使用Mono.Cecil的示例:
var module = Mono.Cecil.ModuleDefinition.ReadModule(filePath);
var mvid = module.Mvid;
Run Code Online (Sandbox Code Playgroud)
这是一个独立代码的示例,用于读取没有任何依赖项的 MVID。它是单个文件中 Mono.Cecil 的精简版本:https : //github.com/KirillOsenkov/MetadataTools/blob/master/src/PEFile/ImageReader.cs