System.BadImageFormatException: फ़ाइल या असेंबली लोड नहीं कर सका (installutil.exe से)


104

मैं InstallUtil.exe का उपयोग करके एक Windows सेवा स्थापित करने का प्रयास कर रहा हूं और त्रुटि संदेश प्राप्त कर रहा हूं

System.BadImageFormatException: फ़ाइल या असेंबली को लोड नहीं किया जा सका या {xxx.exe}इसकी निर्भरता में से एक। एक प्रोग्राम को एक गलत प्रारूप के साथ लोड करने का प्रयास किया गया था।

क्या देता है?


संपादित करें: (ओपी द्वारा नहीं) पूर्ण संदेश जिस तरह से अधिक हिट हो रहा है, [googleability के लिए] से निकाला गया:

C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319> InstallUtil.exe C: \ xxx.exe Microsoft (R) .NET फ्रेमवर्क स्थापना उपयोगिता संस्करण 4.0.30319.1 कॉपीराइट (c) Microsoft निगम। सभी अधिकार सुरक्षित।

स्थापना आरंभ करते समय अपवाद हुआ: System.BadImageFormatException: फ़ाइल या असेंबली की फ़ाइल को लोड नहीं किया जा सका: /// C: \ xxx.exe 'या इसकी एक निर्भरता। एक प्रोग्राम को एक गलत प्रारूप के साथ लोड करने का प्रयास किया गया था।

जवाबों:


154

पूर्णता के लिए कुछ और विस्तार के मामले में यह किसी की मदद करता है ...

ध्यान दें कि इन दिनों इस अपवाद का सबसे आम कारण 32 बिट-विशिष्ट ( /platform:x86) DLL को 64 बिट या इसके विपरीत (viz) में लोड करने का प्रयास है जो 64 बिट-विशिष्ट ( /platform:x64) DLL को एक प्रक्रिया में लोड करता है। 32 बिट)। यदि आपका platformगैर-विशिष्ट ( /platform:AnyCpu) है, तो यह उत्पन्न नहीं होगा (कोई संदर्भित निर्भरता गलत बिटनेस के हैं)।

दूसरे शब्दों में, चल रहा है:

% Windir% \ Microsoft.NET \ Framework \ v2.0.50727 \ installutil.exe

या:

% विंडीर% \ Microsoft.NET \ Framework 64 \ v2.0.50727 \ installutil.exe

काम नहीं करेगा (अन्य फ्रेमवर्क संस्करणों में स्थानापन्न: v1.1.4322(केवल 32-बिट, इसलिए यह समस्या उत्पन्न नहीं होती है) और v4.0.30319जैसा कि ऊपर में वांछित है)।

जाहिर है, जैसा कि अन्य उत्तर में है, किसी को भी .net संस्करण संख्या की आवश्यकता होगी जो installutilआप के लिए चल रहे हैं> = (अधिमानतः =) उस EXE / DLL फ़ाइल के लिए जिसे आप इंस्टॉलर चला रहे हैं।

अंत में, ध्यान दें कि विज़ुअल स्टूडियो 2010 में, टूलिंग x86 बायनेरिज़ बनाने के लिए डिफ़ॉल्ट होगा ( पहले की तरह किसी भी सीपीयू के बजाय )।

System.BadImageFormatException का पूरा विवरण (केवल कारण बेमेल है, यह कहना कि वास्तव में एक सकल निरीक्षण है!)।

BadImageFormatExceptionएक x64 इंस्टॉलर के तहत एक और कारण यह है कि Visual Studio 2010 में, डिफ़ॉल्ट .vdprojइंस्टॉल प्रोजेक्ट प्रकार एक 32-बिट InstallUtilLibशिम उत्पन्न करता है , यहां तक ​​कि एक x64 सिस्टम पर भी ("64-बिट प्रबंधित कस्टम क्रियाओं के लिए खोज करें। System.BadImageFitatException अपवाद" पर पन्ना)।


मेरे पास एक ही मुद्दा था, जब मैं आपके कहे अनुसार डिबगिंग शुरू करता हूं, तो मैंने पाया कि प्लेटफार्म: x86 के रूप में सेट किया गया था। जब मैंने इसे किसी CPU में बदल दिया, तो इसने काम किया :)
Atta H.

मेरे पास कस्टम क्रियाओं के साथ मेरी विंडोज़ इंस्टॉलर है। मेरे सेटअप को x64 सिस्टम पर चलने की आवश्यकता है, इसलिए कस्टम क्रिया गुणों को "Run64Bit" विकल्प को सही से जांचना होगा। इसने मेरी समस्या हल कर दी।
हेगन

16

सुनिश्चित करें कि सबसे नया फ्रेमवर्क (जिसे आपने अपना ऐप संकलित किया है) पहले पेट में है। इससे मेरे लिए समस्या हल हो गई। ( एक मंच पर मिला )


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

3
यहाँ यह Archive.org पर है web.archive.org/web/20100527204545/http://www.issociate.de/...
Epaga

9

मुझे लगता है कि आप 32-बिट एप्लिकेशन को स्थापित करने के लिए 64-बिट संस्करण का उपयोग कर रहे हैं। मैंने भी आज इस मुद्दे का सामना किया है और इस रूपरेखा पथ का इस्तेमाल किया है।

C: \ Windows \ Microsoft.NET \ फ्रेमवर्क \ v4.0.30319

और यह आपके 32-बिट एप्लिकेशन को ठीक स्थापित करना चाहिए।


मेरे लिए यही परिदृश्य था। बहुत मददगार जवाब।
सिमोस फासलियोटिस

मूल उत्तर को कम से कम लिंक करें: stackoverflow.com/revisions/5229405/1
crusy

8

कुंजी परियोजना के लिए मैच प्रोसेसर सेटिंग्स सेट करने के लिए है जो दो स्थानों पर हैं।

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

और यह भी सुनिश्चित करें कि आर्किटेक्चर सेटिंग्स टेस्ट मेनू में समान हैं >> टेस्ट सेटिंग्स >> डिफ़ॉल्ट प्रोसेसर आर्किटेक्चर >> जैसा कि नीचे दिखाया गया है।

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

यह VS2013 के लिए है, लेकिन शायद अन्य संस्करणों के लिए भी यही है।

अद्यतन - VS2019 के लिए:

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


यह इस त्रुटि को ठीक करने का सही तरीका है। यदि आप संभवतः सैकड़ों csproj फ़ाइलों के साथ गड़बड़ नहीं करना चाहते हैं।
बिशन

6

ठीक है, यह वह समस्या है जो मैंने की थी, और, जो इसे तय किया था, वह ऊपर से बहुत प्रासंगिक लगता है।

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

मैंने सेवा लिखी और इसका उपयोग करके इसे स्थापित करने का प्रयास किया installutil.exeऔर निम्नलिखित त्रुटि मिली:

System.BadImageFormatException: फ़ाइल या असेंबली '{filename.exe}' या उसकी किसी एक निर्भरता को लोड नहीं किया जा सका। एक प्रोग्राम को एक गलत प्रारूप के साथ लोड करने का प्रयास किया गया था।

अब तक मूल लेखक के समान ही।

दृश्य स्टूडियो 2010 के 32 बिट आउटपुट के बारे में रूबेन का अवलोकन यहां उद्धारक था।

मैंने 64-बिट संस्करण का उपयोग किया installutil.exeऔर निश्चित रूप से पर्याप्त है, विज़ुअल स्टूडियो 2010 बिल्ड का आउटपुट 32-बिट था। बस थोड़ा अतिरिक्त मूल्य जोड़ने के लिए, आप जुड़े नवीनतम नेट ढांचे के 32-बिट संस्करण और पा सकते हैं installutil.exeमें C: \ Windows \ Microsoft.NET \ ढांचे फ़ोल्डर। installutil.exeनिश्चित मेरी समस्या के इस संस्करण का उपयोग करना ; सेवा एक अड़चन के बिना स्थापित!

मुझे उम्मीद है कि इससे किसी और को वहां पहुंचने में मदद मिलेगी।


मुझे नहीं पता कि 32-बिट संस्करण से आपका क्या अभिप्राय है, लेकिन मैंने यहाँ एक कोशिश की और यह C: \ Windows \ Microsoft.NET \ Framework \ v2.0.50727
user2568374

3

सभी उल्लिखित समाधानों को आजमाने के बाद मैंने पाया कि PlatformTargetकिसी तरह AnyCPUमेरी परियोजना में विन्यास को जोड़ा गया है ।csproj

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    <DebugType>pdbonly</DebugType>
    <Optimize>true</Optimize>
    <OutputPath>bin\Release\</OutputPath>
    <DefineConstants>TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
    <PlatformTarget>x64</PlatformTarget>
</PropertyGroup>

रेखा को हटाकर मेरे लिए काम किया।


मेरे मामले में, जहां मुझे 64 बिट बिल्ड चाहिए, प्रॉपर्टी ग्रुप नोड्स में से एक <PlatformTarget> x64 </ PlatformTarget> नोड गायब था, इसलिए संभवतः यह 32 बिट के लिए डिफ़ॉल्ट था और खराब कंप्यूटर प्रारूप त्रुटि को फेंक रहा था। एक बार जब मैंने संपत्ति समूह में इस लापता नोड को जोड़ा तो त्रुटि गायब हो गई।
टॉम रेगन

इस समाधान की कोशिश करने से मेरे लिए एक और समस्या पैदा हो गई, जो था app.config का ऐपसेटिंग रनटाइम के दौरान लोड नहीं किया जा रहा था, इसके बावजूद कि आउटपुट डायरेक्टरी में config फाइल मौजूद थी । हालाँकि, ज़ार के दृष्टिकोण की कोशिश करने के बाद ( Processor Architecture for AnyCPU Projects) सब कुछ फिर से काम करना शुरू कर देता है।
बिशन

1

मेरे पास वीएस 2015 का उपयोग कर एक WinForms परियोजना के साथ यह मुद्दा था। मेरा समाधान था:

  1. राइट क्लिक प्रोजेक्ट
  2. गुणों का चयन करें
  3. चेक "32-बिट को प्राथमिकता दें"
  4. प्लेटफ़ॉर्म लक्ष्य: कोई भी सीपीयू

0

मेरी भी यही समस्या थी। मैं निष्पादन के लिए मानक कमांड का उपयोग कर रहा हूं। यह X86 आरओ रन को X86 परीक्षणों के खिलाफ कह रहा था। मुझे X86 को निर्दिष्ट करने की आवश्यकता थी और नॉनिट-रनर के X64 संस्करण को नहीं।


0

संक्षेप में, Build और Project \ Build \ Platform दोनों को 64 बिट सिस्टम पर 64 बिट सेवा को सफलतापूर्वक स्थापित करने के लिए x64 पर सेट किया जाना है।


0

मेरा मुद्दा अलग था। यह मेरी विंडोज 7 मशीन के अप्रत्याशित बंद के बाद हुआ। मैंने एक स्वच्छ समाधान का प्रदर्शन किया और यह उम्मीद के मुताबिक चला।


0

इस संदेश को लाइव परीक्षणों में होने के मामले में , लेकिन यूनिट परीक्षणों में नहीं , यह इसलिए है क्योंकि चयनित विधानसभाओं को मक्खी पर कॉपी किया जाता है $(SolutionDir)\.vs\$(SolutionName)\lut\0\0\x64\Debug\। लेकिन कुछ समय में कुछ विधानसभाओं का चयन नहीं किया जा सकता है , उदाहरण के लिए, वीसी ++ इंटरोप सी + / सी # परियोजनाओं के मामले में dlls।

पोस्ट-बिल्ड xcopyसमस्या को ठीक नहीं करेगा, क्योंकि प्रतिलिपि की गई फ़ाइल को लाइव परीक्षण इंजन द्वारा मिटा दिया जाएगा।

तिथि करने के लिए एकमात्र वर्कअराउंड (28 डेसी 2018), लाइव परीक्षणों से बचने के लिए, और विशेषता के साथ यूनिट परीक्षणों में सब कुछ करना है [TestCategory("SkipWhenLiveUnitTesting")] टेस्ट क्लास या टेस्ट पद्धति पर लागू ।

इस बग को किसी भी Visual Studio 2017 में 15.9.4 तक देखा जाता है, और इसे Visual Studio टीम द्वारा संबोधित करने की आवश्यकता होती है।


0

लक्ष्य निर्माण x 64 लक्ष्य सर्वर होस्टिंग IIS 64 बिट

वेबसाइट / वेब एप्लिकेशन को चलाने वाले ऐप्पल होस्टिंग को राइट क्लिक करें और सक्षम करें 32 बिट एप्लिकेशन = गलत।

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


0

मैंने आज इस मुद्दे का सामना किया है। मेरे मामले में, मेरे आवेदन का (64-बिट dll का एक संदर्भ था) प्लेटफ़ॉर्म लक्ष्य निर्धारित किया गया था, AnyCPUलेकिन प्लेटफ़ॉर्म लक्ष्य अनुभाग के तहत Prefer 32-bit चेक बॉक्स डिफ़ॉल्ट रूप से टिक गया था। यह समस्या थी और संयुक्त राष्ट्र के चेकिंग Prefer 32-bitविकल्प के बाद सब ठीक हो गया ।


0

हमें एक ही लक्षण के साथ एक समस्या का एक अलग समाधान मिला:

हमने इस त्रुटि को देखा जब हमने .net 4.7.1 से 4.7.2 तक परियोजना को अद्यतन किया।

समस्या यह थी कि भले ही हम System.Net को संदर्भित नहीं कर रहे थे। इस परियोजना में किसी भी और अधिक के रूप में, यह हमारे web.config के भरोसेमंद अनुभाग में सूचीबद्ध था। इसे और किसी भी अन्य अप्रयुक्त असेंबली संदर्भ को वेब से हटाकर। समस्या को हल किया गया।


0

समस्या यह है कि System.BadImageFormatException: Could not load file or assemblyइनमें से हर एक से जुड़ा नहीं है जो installutil.exeइस बहुत ही सूत्र को इंगित करता है।

  1. यदि आपका मुद्दा WindowsBaseया PresentationFramework dlls से संबंधित है और आपको विश्लेषणकर्ता स्थापित हो गए हैं, तो सुनिश्चित करें कि या तो उन्हें आपके समाधान में सभी परियोजनाओं के लिए या उनमें से किसी के लिए स्थापित किया गया है।

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

  2. .csprojकेवल दो के बजाय अपनी लाइब्रेरी की फ़ाइल में संपूर्ण रूपरेखा देखें dlls:

    <Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
    
      <PropertyGroup>
        <OutputType>Library</OutputType>
        <TargetFramework>netcoreapp3.0</TargetFramework>
        <RazorLangVersion>3.0</RazorLangVersion>
        <UseWpf>True</UseWpf>
      </PropertyGroup>
  3. निकालें binऔर objdirs, साफ समाधान और पुनर्निर्माण।

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