2011-03-22 13 views
7

मैं .NET 4 फ्रेमवर्क पर लक्षित एक WPF अनुप्रयोग में .NET 2.0 DLL का संदर्भ जोड़ने का प्रयास कर रहा हूं।.net 4.0 wpf अनुप्रयोग में .Net 2.0 dll का उपयोग करें

मैंने app.config फ़ाइल में <startup useLegacyV2RuntimeActivationPolicy="true"> जोड़ा। डब्ल्यूपीएफ ऐप ठीक बनाता है, लेकिन नेट 2.0 डीएलएल तक पहुंचने का प्रयास करते समय रनटाइम पर BadImageFormatException प्राप्त करता है।

यह एक नया परीक्षण WPF परियोजना के साथ काम करता है "का प्रयास गलत प्रारूप के साथ एक कार्यक्रम लोड करने के लिए बनाया गया था", लेकिन मेरे ऐप्स पर काम नहीं करता। मेरा ऐप एंटीटी फ्रेमवर्क और एमईएफ का उपयोग करता है। क्या ये तकनीकें समस्या पैदा कर सकती हैं?

कोई विचार?

संपादित करें: हल

नीचे Alois द्वारा टिप्पणी के अनुसार, मैं अपने मुख्य अनुप्रयोग के लिए 'किसी भी सीपीयू' लक्षित था और DLL 32-बिट के लिए लक्षित किया गया था।

<startup useLegacyV2RuntimeActivationPolicy="true">

+2

क्या यह हो सकता है कि असेंबली 32 बिट के लिए संकलित हो और आप इसे 64 बिट प्रक्रिया में लोड कर रहे हों या इसके विपरीत? जांचने के लिए .NET Framework SDK से corflags का उपयोग करें। –

+0

@Alois: धन्यवाद। मैंने इसके बारे में सोचा नहीं था। मेरा ऐप 'किसी भी सीपीयू' को लक्षित किया गया था। इसे x86 में बदलना इसे सही ढंग से लोड करने देता है। – Mike

उत्तर

2

की आवश्यकता नहीं थी आप useLegacyV2RuntimeActivationPolicy विशेषता तो आप एक मिश्रित-मोड विधानसभा कि C++/CLI में लिखा गया था के साथ काम कर रहे हैं और CLR के संस्करण 2.0.50727 लक्ष्यीकरण का उपयोग करने के लिए है जब। इस तरह की एक असेंबली में प्रबंधित कोड और देशी मशीन कोड दोनों होते हैं। यह मशीन कोड आपके मामले में 32-बिट है, आप इसे 64-बिट प्रक्रिया में नहीं चला सकते हैं। अपवाद का अर्थ क्या है। अपने EXE प्रोजेक्ट में प्लेटफ़ॉर्म लक्ष्य को x86 पर सेट करना आवश्यक है।

+0

हां। प्रश्न में उपरोक्त टिप्पणियां देखें। यह पहले से ही पता चला था कि मैं 64-बिट प्रक्रिया में 32-बिट कोड लोड कर रहा था। इसके अलावा, उपयोग LegacyV2RuntimeActivationPolicy की आवश्यकता नहीं थी। यह केवल 32-बिट समस्या थी। मैं उपयोग को हटाने में सक्षम था LegacyV2RuntimeActivationPolicy = "true" – Mike

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