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


408

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

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

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

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

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

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


1
यदि आपके पास रिपॉजिटरी में एक संस्करण इतिहास है, तो क्या आप जांच सकते हैं कि क्या csproj फाइलों में कुछ अंतर हैं?
स्टीव

@Steve: मर्क्यूरियल के अनुसार, नई .cs फाइलों में संदर्भ जोड़ने के अलावा कोई बदलाव नहीं
BlueRaja - Danny Pflughoeft

क्या आपको अन्य मशीन पर समान व्यवहार मिलता है? क्या मशीन पर कुछ और बदलाव हुआ (जैसे विंडोज अपडेट, निर्भरता अपडेट आदि)?
माइक पार्कहिल

क्या आपने उन नई .cs फ़ाइलों को वापस लाने की कोशिश की है?
माइक पार्कहिल

2
यह मेरे लिए काम करता है ............ stackoverflow.com/a/9419522/191403
सोम

जवाबों:


647

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


71
Do'h। मैं किसी तरह पूरी तरह से "प्लेटफ़ॉर्म टारगेट" ड्रॉपडाउन को याद कर रहा project-->properties-->buildथा - यह x86 के लिए सेट किया गया था; इसे "किसी भी CPU" पर सेट करने से यह समस्या ठीक हो जाती है। मैंने हमेशा सोचा था कि यह सेटिंग कॉन्फ़िगरेशन मैनेजर में "प्लेटफ़ॉर्म लक्ष्य" ड्रॉपडाउन के समान थी, लेकिन जाहिरा तौर पर यह नहीं है (वास्तव में, कॉन्फ़िगरेशन मैनेजर में "प्लेटफ़ॉर्म लक्ष्य" कुछ भी करने के लिए प्रकट नहीं होता है!)
BlueRaja - डैनी Pflughoeft

10
यह भी सत्यापित करें कि प्रोजेक्ट कोई भी सीपीयू नहीं है जिसमें 32 बिट चेक प्रेफर हो। प्रोजेक्ट -> गुण -> निर्माण
रीड इवांस

26
पुनश्च: एक और कारण है "32-बिट अनुप्रयोगों को सक्षम करें" ऐप पूल सेटिंग्स में "झूठा" होना। इसे सही करने के लिए आपको IIS को पुनरारंभ करना होगा।
dvdmn

3
इस त्रुटि के साथ मेरे साथ सबसे बुरा तब हुआ जब वीएस ने <PlatformTarget>x86</PlatformTarget>बिना किसी कारण के किसी एक आश्रित परियोजना में शामिल होने का निर्णय लिया । अगर मैंने एसवीएन में नहीं देखा है तो मुझे कभी पता नहीं चला कि हमारा एमवीसी ऐप लॉन्च करने में विफल क्यों है।
जाहू

1
कृपया IIS DefaultAppPool में सेट
करें-

195

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

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

कदम

  1. IIS प्रबंधक खोलें
  2. एप्लिकेशन पूल पर क्लिक करें
  3. जो भी एप्लिकेशन पूल आप उपयोग कर रहे हैं उसे चुनें
  4. दाएँ फलक से, उन्नत सेटिंग्स पर क्लिक करें ...

  5. 32-बिट अनुप्रयोगों को True पर सेट करें

    एडवांस सेटिंग 32-बिट सक्षम करें


1
क्या मैं कुछ भुल गया? ओपी एक आईआईएस तैनाती नहीं कंसोल ऐप के बारे में बात कर रहा है : "प्रोजेक्टबी एक कंसोल एप्लीकेशन है, जो प्रोजेक्टा पर निर्भर करता है"
मिकी

129

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

उपकरण → विकल्प → प्रोजेक्ट और समाधान → वेब प्रोजेक्ट्स
उस बॉक्स को चेक करते हैं जो कहता है "वेब साइटों और परियोजनाओं के लिए IIS एक्सप्रेस के 64 बिट संस्करण का उपयोग करें"।

स्क्रीनशॉट:

वेब प्रोजेक्ट के लिए VS विकल्पों का स्क्रीनशॉट।


2
इसके विपरीत लागू होता है, मेरे पास 'यूज 64 बिट' टिक गया था और इसे अनचेक करने की जरूरत थी ...
cjb110

32

मुझे भी बिल्कुल यही समस्या है। मैंने प्रोजेक्ट ए के "प्लेटफ़ॉर्म टार्गेट" ("प्रोजेक्ट ए" (राइट क्लिक) -> गुण-> बिल्ड -> "प्लेटफ़ॉर्म टारगेट") को x86 पर सेट किया था, लेकिन प्रोजेक्ट बी को "किसी भी सीपीयू" पर रखा। प्रोजेक्ट बी को "x86" पर सेट करना इसे निर्धारित करता है।


15

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

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

7

यदि आप अपने प्रोजेक्ट में कम से कम 1 32bit dll \ exe रखते हैं, तो आपको IIS7 में TRUE करने के लिए Appication Pool सेटिंग "Enable 32bit Applications" को बदलने की आवश्यकता हो सकती है ।


OP एक कंसोल ऐप के बारे में बात कर रहा है जो IIS
मिकी

5

सबसे पहले मैं एक पुराने परियोजना मैं एक बनाने के लिए आवश्यक के साथ VS2017 में यह मिल गया छोटे करने के लिए परिवर्तन और सभी ढांचे 4.7 के लिए परियोजनाओं upraded।


कई अन्य लोगों ने Any CPUइस मुद्दे को ठीक करते हुए चयन का उल्लेख किया है ।

वहाँ कुछ स्थानों पर आप इसे करने की जरूरत है, और यह सिर्फ ड्रॉपडाउन से चयन के रूप में सरल नहीं हो सकता है। यह मेरे लिए यह तय:

1) आपको इसे यहाँ करने की आवश्यकता है:

यहां छवि विवरण दर्ज करें

2) और भी Configuration Manager(समाधान पर राइट क्लिक करें)

यहां छवि विवरण दर्ज करें

लेकिन अगर यह नहीं है तो क्या होगा ???

फिर Newइन सेटिंग्स को क्लिक करें और चुनें: ( साभार @RckLN )

यहां छवि विवरण दर्ज करें


2

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


1
रिलीज में काम किया लेकिन डिबग में असफल रहे। सभी .Net फ्रेमवर्क 4 (अपडेट 1 नहीं) पर सेट करें और डीबग अब चलता है।
डीसीएस्टेनहोलज़ २०'१६

2

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

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


1
भविष्य के पाठकों के लाभ के लिए लिंक किए गए लेख को सारांशित करने पर विचार करें; यदि लिंक मृत हो जाता है।
बॉन्ड - जावा बॉन्ड

2

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


2

विजुअल स्टूडियो ऑनलाइन (VSTS) बिल्ड Visual Studio Buildस्टेप्स का उपयोग करके प्रोजेक्ट बनाते समय मुझे यह मिला ।

समाधान था:

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

वीएसओ स्क्रीनशॉट


2

निम्नलिखित ने मेरे लिए समस्या हल की, '32-बिट को प्राथमिकता दें' को अनचेक करें: यहां छवि विवरण दर्ज करें


1

मैंने उसी मुद्दे का सामना किया। यह नीले रंग से बाहर हुआ और मुझे अजीब लगा।

FusionLog के लिए अपवाद स्नैपशॉट में, मैंने इसके संदेश के भीतर निम्नलिखित देखा:

... C: \ Windows \ Microsoft.NET \ Framework64 ...

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

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

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


1

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

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


1

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

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

वर्कअराउंड के रूप में, ऐप में अप डीबगिंग के लिए आपके द्वारा उपयोग किए जा रहे टारगेट फ्रेमवर्क को लाएं ।config

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

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

1

C # के लिए मेरे प्रोजेक्ट में, प्रोजेक्ट प्रॉपर्टी -> [बिल्ड] -> प्लेटफ़ॉर्म लक्ष्य: कोई भी CPU, और कंपाइलर को स्वतः चुनने के लिए 32-बिट को अनचेक करें।


1

चिल्कैट .NET 4.5 असेंबली के लिए वीसी ++ 2012 या 2013 रनटाइम को किसी भी कंप्यूटर पर स्थापित करने की आवश्यकता होती है जहां आपका एप्लिकेशन चलता है। अधिकांश कंप्यूटर पहले से ही इसे स्थापित कर चुके होंगे। आपके विकास कंप्यूटर में यह होगा क्योंकि विजुअल स्टूडियो स्थापित किया गया है। हालाँकि, यदि आवश्यक VC ++ रनटाइम उपलब्ध नहीं है, तो कंप्यूटर पर परिनियोजित करने पर, उपरोक्त त्रुटि उत्पन्न होगी:

सभी bellow पैकेजों को स्थापित करें

विजुअल C ++ Redistributable Package for Visual Studio 2013 - vcredist_x64

दृश्य स्टूडियो के लिए विजुअल C ++ पुनर्वितरण पैकेज - vcredist_x86

विज़ुअल स्टूडियो के लिए विजुअल C ++ रिडिजेंडेबल पैकेज - vcredist_x64

विजुअल C ++ Redistributable Package for Visual Studio 2012 - vcredist_x86


1

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


0

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


0

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

यहां छवि विवरण दर्ज करें

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


0

मेरे मामले में एक निर्भरता dll में गायब थी जिसने इस अपवाद को फेंक दिया। मैंने डिपेंडेंसी वॉकर के साथ जांच की, लापता डीएल को जोड़ा और समस्या का समाधान किया गया।

अधिक विशेष रूप से, मैंने किसी तरह गलती से SVN कीवर्ड जोड़कर अपने opencv_core340.dll को भ्रष्ट कर दिया, और इस तरह मेरा dll अब इसका उपयोग नहीं कर सका। हालाँकि मैं नहीं मानता कि इस समस्या का समाधान इस बात पर निर्भर करता है कि dll दूषित है या गायब है। मैं इसे पूरी जानकारी देने के लिए जोड़ रहा हूं।


0

गोली मार! मुझे इस समस्या के बारे में पता था। मुझे लगा कि मैं सही तरीके से सब कुछ कर रहा हूं जब तक कि मैंने गलती से वीएस आउटपुट विंडो में 'x86' नहीं देखा और जब मैंने कारण को पकड़ लिया। आज उस पर कुछ मिनट बर्बाद कर दिया।

'प्रकाशित' विंडो के तहत विन्यास 'x86' पर सेट किया गया था; जबकि, हर जगह, यह 'x64' था।

कृपया सुनिश्चित करें कि यह कॉन्फ़िगरेशन मैनेजर में सिंक है, सेटिंग्स, समाधान कॉन्फ़िगरेशन और IIS सेटिंग्स (यदि वह आपका वेब सर्वर है) प्रकाशित करें।

इसके अलावा, कृपया ध्यान रखें - VS एक 32-बिट ऐप है और IIS 64 बिट है। IIS में डिफ़ॉल्ट रूप से 32-बिट ऐप्स अक्षम हैं।

यहां छवि विवरण दर्ज करें


0

मैंने अन्य उत्तरों से कुछ अलग पाया है। मेरी परियोजना में इस अपवाद तक पहुँचना एक भ्रष्ट संकलन का परिणाम था। कोई भी बदलाव किए बिना, केवल पुनर्निर्माण के लिए मजबूर करना , यह तय किया गया था।


0

मेरी भी यही समस्या थी। मेरे मामले में प्रोजेक्ट B एक .Net कोर क्लास लाइब्रेरी था जिसमें एक Nuget "Microsoft.Management.Infrastructure" स्थापित है। त्रुटि यह थी कि मैंने अपने प्रोजेक्ट B को "MI" कहा। मैंने प्रोजेक्ट का नाम कुछ और बदल दिया और अचानक सब कुछ फिर से काम कर गया।


-1

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


-1

क्या आप cmd से अपनी .exe फ़ाइल चलाने का प्रयास कर रहे हैं? यह मेरी गलती थी। बस .exe फ़ाइल को डबल क्लिक करके चलाएं। यदि यह Windows 8.1 / Windows Server 2012 R2 x64 के लिए .NET कोर SCD है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.