c# - फ़ाइल या असेंबली लोड नहीं हो सका...एक प्रोग्राम को गलत प्रारूप के साथ लोड करने का प्रयास किया गया था(System.BadImageFormatException)




console-application (18)

मेरे पास दो परियोजनाएं हैं, ProjectA और ProjectBProjectB एक कंसोल एप्लीकेशन है, जो ProjectB ए पर निर्भर करता है। कल, सबकुछ ठीक काम कर रहा था, लेकिन अचानक जब मैं ProjectB चलाता हूं तो मुझे यह मिलता है:

BadImageFormatException unhandled था :
फ़ाइल या असेंबली 'ProjectA, संस्करण = 1.0.0.0, संस्कृति = तटस्थ, PublicKeyToken = null' या इसकी निर्भरताओं में से एक लोड नहीं हो सका। एक गलत प्रारूप के साथ एक प्रोग्राम लोड करने के लिए एक प्रयास किया गया था।

दोनों नियमित परियोजनाएं हैं, बिना किसी अन्य गैर-नेट परियोजनाओं पर निर्भरता। दोनों पूरी तरह से हैं। नेट - कोई मूल कोड नहीं है, और कोई पी / Invoke नहीं है। मेरे पास अन्य परियोजनाएं हैं जो प्रोजेक्ट ProjectA पर निर्भर करती हैं और अभी भी ठीक काम करती हैं।

चीजें मैंने कोशिश की है:

  • सुनिश्चित करें कि बिल्डिंग चेकबॉक्स के साथ दोनों परियोजनाएं "कोई भी CPU" पर सेट हैं। वो हैं।
  • सुनिश्चित करें कि दोनों परियोजनाएं एक ही लक्ष्य फ्रेमवर्क (.NET 4.0 क्लाइंट प्रोफ़ाइल) के लिए हैं
  • ProjectB -> संदर्भ -> ProjectA -> गुणों के तहत, सुनिश्चित करें कि "कॉपी स्थानीय" को "True" _ पर सेट किया गया है (मैंने सत्यापित किया है कि ProjectA.dll को सही तरीके से कॉपी किया जा रहा है)
  • समाधान को साफ / पुनर्निर्माण करें। मैंने दोनों परियोजनाओं में / bin और / obj फ़ोल्डरों को मैन्युअल रूप से हटाने का भी प्रयास किया।
  • विजुअल स्टूडियो को पुनरारंभ करें। मेरे कंप्यूटर को पुनरारंभ करें।
  • भंडार की पूरी तरह से नई प्रतिलिपि देखें।

लेकिन मुझे अभी भी वही त्रुटि मिलती है। मुझे नहीं पता कि मैंने इसका कारण क्या किया, न ही इसे कैसे ठीक किया जाए। कोई विचार?


Answers

यदि आप वीएस में एमएसआई इंस्टॉलर के साथ 64 बिट प्रोजेक्ट को पैकेज करने का प्रयास कर रहे हैं तो आप यह समस्या भी देख सकते हैं। ("इसका कारण यह है कि .msi फ़ाइल के साथ पैक किया गया मूल शिम 32-बिट निष्पादन योग्य है।")

अधिक जानकारी के लिए यहां देखें: http://blogs.msdn.com/b/heaths/archive/2006/02/01/64-bit-managed-custom-actions-with-visual-studio.aspx


मेरे पास विजुअल स्टूडियो 2015 में आईआईएस एक्सप्रेस चलाने वाला यह त्रुटि संदेश था। मेरे मामले में मुझे आईआईएस एक्सप्रेस के 64 बिट संस्करण को चलाने की आवश्यकता थी:

टूल्स -> विकल्प -> प्रोजेक्ट्स एंड सॉल्यूशंस -> वेब प्रोजेक्ट्स
"वेब साइट्स और परियोजनाओं के लिए आईआईएस एक्सप्रेस के 64 बिट संस्करण का उपयोग करें" बॉक्स को चेक करें।

स्क्रीनशॉट:


हो सकता है कि आप सर्वर पर तैनाती के बाद अपनी वेबसाइट के साथ समस्या का सामना कर रहे हों।

फिर आपको 32-बिट अनुप्रयोगों को सक्षम करने के लिए अपने एप्लिकेशन पूल को समायोजित करने की आवश्यकता है।

कदम:

  1. ओआईएस प्रबंधक खोलें
  2. एप्लिकेशन पूल पर क्लिक करें
  3. आप जिस भी एप्लिकेशन पूल का उपयोग कर रहे हैं उसका चयन करें
  4. दाएं फलक से, उन्नत सेटिंग्स पर क्लिक करें ...
  5. सही करने के लिए 32-बिट अनुप्रयोग सक्षम करें सेट करें


मेरी मशीन ने मुझे एक BIOS अपडेट दिखाया और मुझे आश्चर्य हुआ कि क्या इस त्रुटि के अचानक पॉप-अप के साथ इसका कुछ संबंध है। और मैंने अद्यतन करने के बाद, त्रुटि हल हो गई और समाधान ठीक बनाया गया।


यदि आप अपने प्रोग्राम से लिबर ऑफिस का उपयोग क्लिनेट नेट एकीकरण के माध्यम से करते हैं , तो मुझे वही त्रुटि मिलती है। मैं अपने पीसी पर उत्पादन वातावरण पर लिबर ऑफिस के पुराने संस्करण का उपयोग करता हूं, मैंने एक नया संस्करण स्थापित किया जो कि संघर्ष में था। बस LibreOffice अनइंस्टॉल करें। मुझे यहां समाधान मिला .नेट सीएलआई: फ़ाइल या असेंबली 'cli_cppuhelper' लोड नहीं कर सका


मेरे पास एक ही समाधान में कई परियोजनाओं के साथ एक ही समस्या थी, मैंने लक्षित सीपीयू के लिए सभी लक्ष्य ढांचे को .NET Framework 4 और x86 पर सेट करना समाप्त कर दिया और अंततः इसे सफलतापूर्वक संकलित किया गया।


Visual Studio Build स्टेप्स का उपयोग करके Visual Studio Build ऑनलाइन (वीएसटीएस) के माध्यम से एक परियोजना का निर्माण करते समय मुझे यह मिला।

समाधान था:

  • मौजूदा स्रोत फ़ोल्डर हटाएं
  • स्पष्ट रूप से निर्भरता सहित सभी विजुअल स्टूडियो बिल्डों के लिए मंच में 'कोई भी CPU' सेट करें (नीचे स्क्रीनशॉट देखें)।
  • निर्माण फिर से चलाएं


मुझे पूरा यकीन है कि आपके पास 32-बिट / 64-बिट संघर्ष है। ऐसा लगता है कि आपकी मुख्य परियोजना 32-बिट पर सेट की जा सकती है जबकि कक्षा का संदर्भ 64-बिट पर सेट किया गया है। इस एसओ सवाल और यह भी देखने की कोशिश करो। उनमें से दो के बीच, आप अपनी समस्या का पता लगाने में सक्षम होना चाहिए।


यदि आपके पास आपके प्रोजेक्ट में कम से कम 1 32 बिट डीएल \ exe है तो आपको IIS7 में TRUE के लिए "32 बिट एप्लिकेशन सक्षम करें" सेटिंग पूल सेटिंग को बदलने की आवश्यकता हो सकती है।


यह ऐप.कॉन्फिग फ़ाइल में परिभाषित कई समर्थित फ्रेमवर्कों के साथ भी हो सकता है और ऐप को एप.कॉन्फिग फ़ाइल में पहले बताए गए किसी अन्य के अलावा एक अलग .NET ढांचे में चलाने के लिए मजबूर कर सकता है

और यह भी आग लगती है जब आपके सिस्टम में उल्लिखित दोनों ढांचे हैं।

एक कामकाज के रूप में, ऐप.कॉन्फिग में डिबगिंग के लिए उपयोग करने वाले लक्ष्य ढांचे को लाएं

उदाहरण: यदि आप .NET 4 में चलाने की कोशिश कर रहे हैं, तो कॉन्फ़िगरेशन फ़ाइल में ऐसा कुछ होना चाहिए,

<supportedRuntime version="v4.0"/>
<supportedRuntime version="v2.0.50727"/>

यह थोड़ा मजाकिया हो सकता है, लेकिन मुझे सामान्य कामकाजी कोड के साथ एक ही समस्या थी। मैंने StreamWriter और StreamReader जोड़ा और यह त्रुटि दी। समाधान था कि मैंने उस कोड को टिप्पणी ब्रैकेट में लिया था, फिर डीबग किया और फिर से काम करना शुरू कर दिया


मुझे एक ही समस्या का सामना करना पड़ा। यह नीले रंग से निकला और यह मेरे लिए अजीब लग रहा था।

अपवाद स्नैपशॉट में, फ्यूजनलॉग के लिए, मैंने निम्नलिखित संदेश को इसके भीतर देखा:

... सी: \ विंडोज \ माइक्रोसॉफ्ट.NET \ Framework64 ...

संलयन लॉग के बारे में अधिक जानकारी: http://msdn.microsoft.com/en-us/library/e74a18c4(v=vs.110).aspx

सभी परियोजनाओं में किसी भी सीसीपीयू का लक्ष्य सीपीयू था। मैंने x86 के लक्ष्य सीपीयू में एप्लिकेशन प्रोजेक्ट (प्रोजेक्ट जो अन्य सभी परियोजनाओं का संदर्भ देता है) बदल दिया। यह अब काम करता है।

यह सुनिश्चित नहीं है कि लक्षित सीपीयू मिश्रण कैसे स्पष्ट कारण के लिए हुआ, लेकिन ऐसा हुआ।


मुझे विजुअल स्टूडियो 2017 पर रीशेपर का उपयोग करके यूनिट परीक्षण चलाने में भी समस्या आई और इसे निम्न कॉन्फ़िगरेशन के साथ ठीक किया गया:

इसके अलावा आप रीशेर्पर की रन टेस्ट सेटिंग बदल सकते हैं: https://resharper-support.jetbrains.com/hc/en-us/articles/207242715-How-to-run-MSTest-tests-using-x64-configuration कैसे-to-run-MSTest-tests-using-x64-configuration


मुझे भी बिल्कुल यही समस्या है। मैंने प्रोजेक्ट ए के "प्लेटफार्म लक्ष्य" ("प्रोजेक्ट ए" (राइट क्लिक) -> गुण-> बिल्ड -> "प्लेटफार्म लक्ष्य") को x86 पर सेट किया था लेकिन प्रोजेक्ट बी को "कोई भी CPU" पर रखा था। प्रोजेक्ट बी को "x86" में सेट करना इसे ठीक किया गया है।


मुझे एक परियोजना में इस समस्या का भी सामना करना पड़ता है, कुछ मिनटों के बाद मुझे समाधान मिला, यह समस्या सीपीयू कॉन्फ़िगरेशन के कारण है, यदि आप विजुअल स्टूडियो 2010 या वीएस 2013 का उपयोग कर रहे हैं, तो बस प्रोजेक्ट की प्रॉपर्टीज प्राप्त करें और फिर साइड बार से संकलन का चयन करें और 5 ड्रॉप-डाउन होगा, 5 वें ड्रॉप-डाउन लक्ष्य सीपीयू होगा: आपको इसे किसी भी CPU के बजाय अपनी आवश्यकताओं के अनुसार x86 या x64 पर सेट करना चाहिए।

मेरी समस्या को x86 में बदलने के बाद हल किया गया था।


इनमें से कोई भी समाधान मेरे लिए काम नहीं करता - लेकिन बिन और ओबीजे फ़ोल्डर्स की सामग्री को हटाकर सबकुछ फिर से शांत हो गया।


मुझे विजुअल स्टूडियो 2015 में यूनिट परीक्षण (xunit) चलाने में यह समस्या थी और निम्न फिक्स में आया:

Menu Bar -> Test -> Test Settings -> Default Processor Architecture -> X64

आपको कंपाइलर सेटिंग्स में "डीबग जानकारी जेनरेट" सक्षम करने की आवश्यकता है





c# exception console-application badimageformatexception