2009-10-14 2 views
2

CorFlags와 같은 응용 프로그램을 작성해야합니다. 어셈블리 파일의 경로가있는 경우 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

+0

CCI는 단순히 어셈블리에서 메타 데이터를 직접 읽으므로 더 나은 성능이 기대됩니다. 리플렉션은 훨씬 느리게 운명 지어지는 전체 어셈블리를로드합니다. 다행히도 CCI는 오픈 소스로 공개되었습니다. :) –

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

+0

팁 주셔서 감사 : –

4

System.Reflection.Assembly이에 도움이 물건의 전체 무리가 있습니다 : 여기에 조금 늦게하지만은 예입니다. 당신이 반사를 사용하지 않으려면

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