【问题标题】:How to detemine (by code) the assembly corflags?如何(通过代码)确定汇编器标志?
【发布时间】:2010-12-06 20:13:15
【问题描述】:

我需要编写一个类似 CorFlags 的应用程序。 如果我有汇编文件的路径,如何读取它的 CorFlags?

我特别需要知道程序集是 Any-CPU 还是仅 x86

我想避免使用反射加载程序集,因为我需要扫描许多文件。

【问题讨论】:

    标签: .net assemblies 32bit-64bit corflags


    【解决方案1】:

    查看this 链接,它描述了与您的查询类似的情况。接受的答案描述了如何使用反射和Module.GetPEKind。这可能会对您有所帮助。

    编辑:有点晚了,但这里有一个例子:

    namespace ConsoleApplication1
    {
        using System.Reflection;
    
        public class Program
        {
            public static void Main()
            {
                Assembly a = Assembly.GetExecutingAssembly();
    
                PortableExecutableKinds peKind;
                ImageFileMachine machine;
    
                a.ManifestModule.GetPEKind(out peKind, out machine);
            }
        }
    }
    

    【讨论】:

    • GetPEKind 在检查 32 位程序集时在 64 位进程中失败
    • 感谢您的提示 :)
    【解决方案2】:

    System.Reflection.Assembly 有很多东西可以在这方面为您提供帮助。

    var asmbly = Assembly.ReflectionOnlyLoad("filename");
    var PeFlags = asmbly.ManifestModule.GetPEKind();
    //PeFlags is effectively CorFlags.
    

    【讨论】:

      【解决方案3】:

      如果你不想使用反射,你可以查看

      CCI http://ccimetadata.codeplex.com/Wiki/View.aspx?title=API%20overview

      Mono.Cecil http://www.mono-project.com/Cecil

      【讨论】:

      • CCI 工作得很好。比使用反射加载所有程序集快得多
      • 预计会有更好的性能,因为 CCI 只是直接从程序集中读取元数据。反射将加载注定要慢得多的整个程序集。幸运的是,CCI 已经开源并公开发布。 :)
      猜你喜欢
      • 1970-01-01
      • 2016-03-21
      • 2022-10-15
      • 2020-11-10
      • 2022-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多