【问题标题】:Retrieve MVID of an assembly from c#?从 c# 中检索程序集的 MVID?
【发布时间】:2011-03-03 15:38:09
【问题描述】:

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

【问题讨论】:

标签: c# .net reflection


【解决方案1】:

应该是:

var myAssembly = Assembly.GetExecutingAssembly(); //or whatever
var mvid = myAssembly.ManifestModule.ModuleVersionID;

程序集中可以有其他模块,但 ManifestModule 将是“标识”程序集本身的模块。

【讨论】:

    【解决方案2】:

    这是一个不使用反射来加载程序集而是使用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

    【讨论】:

      猜你喜欢
      • 2014-08-27
      • 2011-11-05
      • 1970-01-01
      • 2020-01-23
      • 2017-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-14
      相关资源
      最近更新 更多