2012-02-27 18 views
7

Bir montajın x86, x64 veya AnyCPU olup olmadığını programsal olarak belirlemem gerek. Orada question hemen hemen aynıdır, ancak bu çözüm buYönetilen bir derlemenin x86, x64 veya AnyCPU olup olmadığı program aracılığıyla nasıl denetlenir?

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

32-bit süreci (ya da tam tersi) bir 64-bit derleme yüklemeye çalışırken başarısız sağlar.

Bir derlemenin derleme türünü programlı olarak bulmak için kusursuz bir yol var mı?

DÜZENLEME: @BenVoigt öneri temel alınarak, DLL'nin yönetilip yönetilmediğini ve x86/x64/AnyCPU olup olmadığını denetleyen bir small command line utility oluşturdum. Umarım birisi yararlı bulur.

+2

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

+0

@BenVoigt Bu büyük olasılıkla bir cevap, bir yorum değil :) – dasblinkenlight

+0

@BenVoigt Şimdi yaptım ve kesinlikle doğru. Cevap ver ve kabul edeceğim. – AngryHacker

cevap

14

Bu soru zaten örtülü oldu:

Ama cevaplar Assembly.LoadFrom kullanımını öneren, eksiktir. Bu korkunç bir fikir, çünkü bu kod, derleme işleminize uymuyorsa, montajdan kod çalıştıracaktır.

Bunun yerine, Assembly.ReflectionOnlyLoadFrom kullanmalısınız. Bu, meta verileri gerçekten herhangi bir kod yüklemeden okumanızı sağlar ve bu nedenle mimarinin doğru olmasına gerek yoktur.

İlgili konular