Как программно проверить, является ли управляемая сборка x86, x64 или AnyCPU? - PullRequest
7 голосов
/ 27 февраля 2012

Мне нужно программно определить, является ли сборка x86, x64 или AnyCPU?Существует почти идентичный вопрос , но решение, которое он обеспечивает

Assembly assembly = Assembly.LoadFrom(fileName);
PortableExecutableKinds peKind;
ImageFileMachine imageFileMachine;
assembly.ManifestModule.GetPEKind(out peKind, out imageFileMachine);

, не удается при попытке загрузить 64-разрядную сборку из 32-разрядного процесса (и наоборот).

Существует ли надежный способ программного определения типа компиляции сборки?

РЕДАКТИРОВАТЬ: Основываясь на предложении @BenVoigt, я создал небольшую утилиту командной строки , которая проверяет, управляется ли DLL или нет и является ли ее x86 / x64 / AnyCPU.Я надеюсь, что кто-то найдет это полезным.

1 Ответ

15 голосов
/ 27 февраля 2012

Этот вопрос уже был рассмотрен:

Но ответы неполные, что предполагает использование Assembly.LoadFrom. Это ужасная идея, поскольку он будет запускать код из сборки, в дополнение к сбою, если битность не соответствует вашему процессу.

Вместо этого вы должны использовать Assembly.ReflectionOnlyLoadFrom. Это позволяет читать метаданные без фактической загрузки какого-либо кода, и поэтому нет необходимости в правильной архитектуре.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...