2009-10-14 52 views
2

我需要编写一个类似CorFlags的应用程序。 如果我有一个装配文件的路径,如何读取它的CorFlags?如何确定(通过代码)组件的符号?

我特别需要知道,如果大会只有

我想避免使用反射,因为我需要扫描许多文件加载组件中的任何-CPU或x86。

回答

3

如果你不想使用反射,可以签出

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

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

检查32位时
+0

CCI工作得很好。使用反射加载所有组件的速度要快得多 – Saar 2009-10-31 10:44:44

+0

预计会有更好的性能,因为CCI只是直接从组件中读取元数据。反射会加载整个注定要慢得多的组件。幸运的是,CCI已经公开发布并公开发布。 :) – 2009-10-31 11:33:01

10

看看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); 
     } 
    } 
} 
+1

GetPEKind在64位进程失败组装 – Kiquenet 2014-03-25 18:20:38

+0

感谢您的提示:) – 2014-03-25 21:08:57

4

System.Reflection.Assembly拥有的东西一大堆,帮助你在这。

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