2012-02-27 12 views
7

Devo determinare a livello di programmazione se un assembly è x86, x64 o AnyCPU? C'è un quasi identico question, ma la soluzione che fornisceCome verificare a livello di programmazione se un assembly gestito è x86, x64 o AnyCPU?

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

fallisce quando si cerca di caricare un assembly a 64 bit da un processo a 32 bit (e viceversa).

Esiste un metodo infallibile per individuare a livello di codice il tipo di compilazione di un assieme?

MODIFICA: in base al suggerimento @BenVoigt, ho creato un small command line utility che controlla se la DLL è gestita o meno e se è x86/x64/AnyCPU. Spero che qualcuno lo trovi utile.

+2

Hai provato ['ReflectionOnlyLoadFrom'] (http://msdn.microsoft.com/en-us/library/system.reflection.assembly.reflectiononlyloadfrom.aspx)? –

+0

@BenVoigt Molto probabilmente è una risposta, non un commento :) – dasblinkenlight

+0

@BenVoigt L'ho fatto ora e tu hai assolutamente ragione. Fai la risposta e io accetterò. – AngryHacker

risposta

14

Questa domanda è stato coperto già:

Ma le risposte sono incomplete, il che suggerisce l'uso di Assembly.LoadFrom. Questa è una pessima idea, dal momento che eseguirà il codice dall'assembly, oltre a fallire se il testimone non corrisponde al tuo processo.

Invece, è necessario utilizzare Assembly.ReflectionOnlyLoadFrom. Ciò ti consente di leggere i metadati senza caricare effettivamente alcun codice e quindi non è necessario che l'architettura sia corretta.

Problemi correlati