2009-10-14 5 views
2

Мне нужно написать приложение, подобное CorFlags. Если у меня есть путь к файлу сборки, как я могу прочитать его CorFlags?Как определить (по коду) сборку флагов?

Я специально нужно знать, если сборка Any-CPU или x86 только

Я хочу, чтобы избежать загрузки сборки с помощью отражения, потому что мне нужно сканировать много файлов.

ответ

3

Если вы не хотите использовать отражение, вы можете проверить

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

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

+0

CCI отлично поработал. Гораздо быстрее, чем использование рефлексии для загрузки всех сборок. – Saar

+0

Ожидается лучшая производительность, поскольку CCI просто считывает метаданные из сборок напрямую. Отражение будет загружать все сборки, которые обречены быть намного медленнее. К счастью, CCI был открыт и опубликован публично. :) –

10

Посмотрите на ссылку this, она описывает аналогичную ситуацию по вашему запросу. В принятом ответе описывается, как вы можете использовать отражение и Module.GetPEKind. Это может вам помочь.

Edit: Немного поздно, но вот пример:

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 разрядном процессе при проверке 32 бит сборки – Kiquenet

+0

Спасибо за подсказку :) –

4

System.Reflection.Assembly имеет целую кучу вещей, чтобы помочь вам в этом.

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