2012-02-27 9 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) की कोशिश की है? –

+0

@BenVoigt यह एक उत्तर है, एक टिप्पणी नहीं :) – dasblinkenlight

+0

@BenVoigt मैंने अभी किया और आप बिल्कुल सही हैं। इसे उत्तर दें और मैं इसे स्वीकार करूंगा। – AngryHacker

उत्तर

14

यह सवाल पहले से ही कवर किया गया है:

लेकिन जवाब अधूरे हैं, Assembly.LoadFrom के उपयोग का सुझाव दे। यह एक भयानक विचार है, क्योंकि यह असफल होने के अलावा असेंबली से कोड चलाएगा, यदि बैठाई आपकी प्रक्रिया से मेल नहीं खाती है।

इसके बजाय, आपको Assembly.ReflectionOnlyLoadFrom का उपयोग करना चाहिए। यह आपको वास्तव में किसी भी कोड को लोड किए बिना मेटाडेटा को पढ़ने देता है, और इसलिए आर्किटेक्चर को सही होने की आवश्यकता नहीं है।

संबंधित मुद्दे