9

मैंने वीएस 2005 में एक डीएल लिखा था जिसे वीएस 2003 में विकसित किया गया एक और प्रोग्राम द्वारा लोड किया जाएगा। जब वह प्रोग्राम मेरे डीएलएल को लोड करने का प्रयास करता है, तो यह System.BadImageFormatException: The format of the file 'Foo.dll' is invalid फेंकता है।System.BadImageFormatException: .NET संस्करण विसंगति को कैसे ठीक करें?

मैंने एसओ और Google की खोज की, और ऐसा लगता है कि .NET का अलग संस्करण अपराधी है। मेरा सवाल है: मैं इसे कैसे ठीक करूं?

+0

यह लिंक भी सहायक था: http://devlicio.us/blogs/ziemowit_skowronski/archive/2008/08/22/working-with-net-1-1-in-visual-studio-2008-and-team -server.aspx – joshdick

+0

एक अलग शब्द के साथ एक देशी (अप्रबंधित) लाइब्रेरी भी इस अपवाद को फेंक सकती है। आपको सही शब्द आकार के लिए एक संस्करण प्राप्त करने या मिलान करने के लिए होस्टिंग एप्लिकेशन बनाने की आवश्यकता होगी। – Pekka

उत्तर

7

वीएस2005 प्रोजेक्ट को उसी .NET संस्करण के साथ संकलित करें जो आपके वीएस2003 प्रोजेक्ट का उपयोग करता है। या, अपने वीएस2003 प्रोजेक्ट के आकार के आधार पर, परावर्तक और इसे फिर से लिखें। यहां परियोजनाओं के लिए यह सामान्य प्रथा है, जहां कुछ अस्पष्ट कारणों के लिए कोई और वीएसएस संस्करण उपलब्ध नहीं है।

+0

"वीएस2005 प्रोजेक्ट को उसी .NET संस्करण के साथ संकलित करें जैसे आपका वीएस2003 प्रोजेक्ट उपयोग करता है।" क्या आप कृपया यह समझा सकते हैं कि ऐसा कैसे करें? मैं नहीं देखता कि मेरे प्रोजेक्ट के .NET संस्करण को कैसे चुनें। – joshdick

+0

वीएस में अपनी परियोजना पर राइटक्लिक करें, पहले टैब पर आप targetframework का चयन कर सकते हैं। –

+0

धन्यवाद, मार्कस। हालांकि यह वीएस 2005 में काम नहीं करता था, लेकिन यह 2008 के संस्करण में काम करता था। तुम्हारी सहायता सराहनीय है। – joshdick

17

जब मैं CLR का 64 बिट संस्करण चला रहा था और एक विधानसभा है कि 32 बिट केवल चिह्नित किया गया था लोड करने की कोशिश मैं यह त्रुटि आई (मैं वी.एस. 2003 में विकसित कार्यक्रम को संशोधित नहीं कर सकते हैं)। मेरे मामले में विशिष्ट असेंबली Oracle.DataAccess.dll था जो ODP.NET के हिस्से के रूप में आता है।

+0

मुझे भी वही त्रुटि मिल रही है (एक अलग असेंबली के साथ), क्या आपके पास इसका कोई समाधान है? – Marek

+1

आपको यह सुनिश्चित करना होगा कि 32 बिट केवल असेंबली –

+1

लोड करते समय आप 32 बिट सीएलआर चलाएं, यह मेरी समस्या का उत्तर था। मुझे थोड़ी देर में इसका सामना नहीं करना पड़ा, लेकिन जब कोई COM इंटरऑप का उपयोग कर रहा है तो 'किसी भी CPU' बिल्ड कॉन्फ़िगरेशन का उपयोग करते समय और 64-बिट सर्वर पर तैनाती करते समय इस परिदृश्य में भागना काफी आम है। X86 कॉन्फ़िगरेशन उन मामलों में आसान हैं। –

14

समाधान: यदि आप आईआईएस 7 पर हैं, तो वेबसाइट के विशिष्ट एप्लिकेशन पूल पर राइट क्लिक/उन्नत सेटिंग्स और 32-बिट एप्लिकेशन सक्षम करने पर सही चुनें। यह काम करना चाहिए।

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