Как я могу получить процессорную архитектуру сборки dll?

Могу ли я получить архитектуру процессора, программно загрузив dll в С#?

Есть ли класс, который может это сделать?

Мне нужно узнать, является ли dll x86, x64, MSIL и т. д.


person 3ggerhappy    schedule 15.11.2010    source источник


Ответы (3)


Предполагая, что вы просматриваете только сборки .net, вы можете использовать CorFlags.exe для просмотра заголовка изображения.

В этом сообщении блога объясняется, как определить как читать результаты. Выдержка:

Использование: сборка Corflags.exe [варианты]

Если параметры не указаны, отображаются флаги для данного изображения.

...

Вот что означает каждый компонент заголовка:

Версия: содержит версию .NET Redist, с помощью которой был создан двоичный файл.

Заголовок CLR: 2.0 указывает на образ .Net 1.0 или .Net 1.1 (Everett), а 2.5 указывает на образ .Net 2.0 (Whidbey).

CorFlags: вычисляется специальными флагами OR’g, чтобы указать, является ли изображение ТОЛЬКО ILONLY, его битность и т. д. и используется загрузчиком. ТОЛЬКО: управляемые образы могут содержать собственный код. Чтобы быть «любым процессором», изображение должно содержать только IL.

32BIT: даже если у вас есть образ, который содержит только IL, он все равно может зависеть от платформы, флаг 32BIT используется для отличия образов «x86» от образов «любой процессор». 64-битные образы отличаются тем, что они имеют тип PE PE32+.
Наиболее интересным аспектом является PE и флаг 32BIT заголовка. Они объединяются, чтобы указать типы сборки. Вот как они будут выглядеть для:

  • любой процессор: PE = PE32 и 32BIT = 0
  • x86: PE = PE32 и 32BIT = 1
  • 64-разрядная версия: PE = PE32+ и 32BIT = 0
person Mike Ohlsen    schedule 01.12.2010
comment
Что лучше: 1) AssemblyName.ProcessorArchitecture, 2) CorFlags.exe (и Parser C# — Process.Start), 3) ApiChange apichange.codeplex.com или 4) PE-ридер stackoverflow.com/a/9767750/206730? - person Kiquenet; 25.03.2014
comment
Я устанавливаю VS 2008, VS 2010, VS 2012 и VS 2013. У меня есть 8 файлов CorFlags.exe в подпапках C:\Program Files (x86)\Microsoft SDKs\Windows\. Что я должен использовать? - person Kiquenet; 25.03.2014

Попытка выяснить это, загрузив сборку, — это вопрос курицы и яйца. Если вы не получите исключение BadImageFormatException, значит, арка подходит, и вас больше не волнует, что это такое. Если вы получаете исключение, значит конфигурация программы неверна. Вы ничего не можете сделать с этим в коде.

person Hans Passant    schedule 15.11.2010
comment
Если, конечно, вы не используете ReflectionOnlyLoadFrom. stackoverflow.com/q/9470199/103167 - person Ben Voigt; 27.02.2012

Вы также можете прочитать файл сборки с помощью FileStream. Формат исполняемых файлов Windows указан в спецификации Microsoft pe/coff. Вы можете прочитать это здесь:

http://www.microsoft.com/whdc/system/platform/firmware/pecoff.mspx

person Scott Wisniewski    schedule 01.12.2010