2012-02-27 6 views
7

Muszę określić programowo, czy zespół jest x86, x64 lub AnyCPU? Istnieje prawie identyczne question, ale rozwiązanie to zapewniaJak sprawdzić programowo, czy zarządzany zespół to x86, x64 lub AnyCPU?

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

zawiedzie podczas ładowania zespołu 64-bitowego z procesu 32-bitowe (i vice versa).

Czy istnieje niezawodny sposób programowego znajdowania typu kompilacji złożenia?

EDYCJA: Na podstawie sugestii @BenVoigt, stworzyłem small command line utility, który sprawdza, czy biblioteka DLL jest zarządzana, czy nie i czy jest to x86/x64/AnyCPU. Mam nadzieję, że ktoś uzna to za przydatne.

+2

Czy próbowałeś ['ReflectionOnlyLoadFrom'] (http://msdn.microsoft.com/en-us/library/system.reflection.assembly.reflectiononlyloadfrom.aspx)? –

+0

@BenVoigt To najprawdopodobniej odpowiedź, a nie komentarz :) – dasblinkenlight

+0

@BenVoigt Zrobiłem to teraz i masz absolutną rację. Niech to będzie odpowiedź, a ja ją zaakceptuję. – AngryHacker

Odpowiedz

14

To pytanie już został pokryty:

Ale odpowiedzi są niepełne, co sugeruje użycie Assembly.LoadFrom. To okropny pomysł, ponieważ uruchomi kod ze zgromadzenia, a także nie powiedzie się, jeśli bitness nie pasuje do twojego procesu.

Zamiast tego należy użyć Assembly.ReflectionOnlyLoadFrom. Dzięki temu możesz wczytać metadane bez ładowania żadnego kodu, dlatego architektura nie musi być poprawna.

Powiązane problemy