2010-11-15 8 views

risposta

1

Cercando di scoprire caricando l'assemblaggio è una proposta di pollo e uova. Se non si ottiene una BadImageFormatException, l'arco è appropriato e non si cura più di cosa sia. Se ottieni l'eccezione, la configurazione del programma è errata. Niente che puoi fare a riguardo nel codice.

+0

A meno che, naturalmente, si utilizza 'ReflectionOnlyLoadFrom'. http://stackoverflow.com/q/9470199/103167 –

9

Supponendo che si stia guardando solo agli assembly .net, è possibile utilizzare CorFlags.exe per esaminare l'intestazione dell'immagine.

This blog post spiega l'utilizzo per determinare come leggere i risultati. Estratto:

Usage: Assemblea Corflags.exe [opzioni]

Se non vengono specificate le opzioni, vengono visualizzate le bandiere per l'immagine data.

...

Ecco quello che ogni componente della testata significa:

Versione: contiene la versione di .NET Redist con cui il binario è costruito.

Intestazione CLR: 2,0 indica un'immagine .Net 1.0 o .Net 1.1 (Everett) mentre 2,5 indica un'immagine .Net 2.0 (Whidbey).

CorFlags: Questo è calcolato flag specifici OR'g per indicare se l'immagine è ILONLY, la sua bitness ecc e viene utilizzato dal caricatore. ILONLY: le immagini gestite da possono contenere codice nativo . Per essere "anycpu" un'immagine deve contenere solo IL.

32BIT: Anche se si dispone di un'immagine che contiene solo L'ancora potrebbe avere dipendenze della piattaforma, il bandiera 32BIT viene utilizzato per distinguere “x86” immagini di immagini “AnyCPU”. Le immagini a 64 bit si distinguono per il fatto che hanno un tipo PE di PE32 + .
L'aspetto più interessante è il PE e il flag 32BIT dell'intestazione. Questi si combinano per specificare i tipi di assieme .Ecco come apparirebbe come ad:

  • AnyCPU: PE = PE32 e 32BIT = 0
  • x86: PE = PE32 e 32BIT = 1
  • a 64 bit: PE = PE32 + e 32BIT = 0
+0

Cosa c'è di meglio: 1) AssemblyName.ProcessorArchitecture, 2) CorFlags.exe (e Parser C# - Process.Start), 3) ApiChange https: //apichange.codeplex. it/o 4) lettore PE http://stackoverflow.com/a/9767750/206730? – Kiquenet

+0

Installazione VS 2008, VS 2010, VS 2012 e VS 2013. Dispongo di 8 file CorFlags.exe in sottocartelle in C: \ Programmi (x86) \ Microsoft SDK \ Windows \. Quale dovrei usare? – Kiquenet

Problemi correlati