2012-02-27 101 views
7

我需要以編程方式確定組件是x86,x64還是AnyCPU?有幾乎相同的question,但該解決方案,它提供如何以編程方式檢查託管程序集是x86,x64還是AnyCPU?

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

試圖從一個32位處理(反之亦然)加載一個64位的組件時失敗。

是否有一種以編程方式查找程序集編譯類型的簡單方法?

編輯:基於@BenVoigt建議,我創建了一個small command line utility,檢查DLL是否管理和是否它的x86/x64/AnyCPU。我希望有人認爲它有用。

+2

你有沒有試過['ReflectionOnlyLoadFrom'](http://msdn.microsoft.com/en-us/library/system.reflection.assembly.reflectiononlyloadfrom.aspx)? – 2012-02-27 18:28:36

+0

@BenVoigt這很可能是一個答案,而不是一個評論:) – dasblinkenlight 2012-02-27 18:30:40

+0

@BenVoigt我現在做了,你是絕對正確的。讓它成爲答案,我會接受它。 – AngryHacker 2012-02-27 18:30:51

回答

14

這個問題一直已覆蓋:

但答案是不完整的,這表明使用Assembly.LoadFrom。這是一個很糟糕的想法,因爲它會從程序集中運行代碼,除了如果位數與您的進程不匹配,還會失敗。

而應該使用Assembly.ReflectionOnlyLoadFrom。這使您可以在不實際加載任何代碼的情況下閱讀元數據,因此不需要架構正確。

相關問題