Azure वेब साइट पर प्रकाशित होने के बाद फ़ाइल या असेंबली System.Web.Http.WebHost को लोड नहीं किया जा सका


141

मैंने एक वेब प्रोजेक्ट बनाया और यह विजुअल स्टूडियो में अच्छा चलता है। हालाँकि, मुझे निम्नलिखित त्रुटि के बाद azurewebsites में प्रकाशित किया गया। क्या कारण हो सकता है मुद्दा?

फ़ाइल या असेंबली लोड नहीं कर सका 'System.Web.Http.WebHost, संस्करण = 5.0.0.0, संस्कृति = तटस्थ, PublicKeyToken = 31bf3856ad364e35' या इसकी एक निर्भरता। स्थित असेंबली की प्रकट परिभाषा असेंबली संदर्भ से मेल नहीं खाती है। (HRESULT से अपवाद: 0x80131040)

विवरण: वर्तमान वेब अनुरोध के निष्पादन के दौरान एक अनियंत्रित अपवाद उत्पन्न हुआ। कृपया त्रुटि के बारे में अधिक जानकारी के लिए स्टैक ट्रेस की समीक्षा करें और यह कोड में कहां उत्पन्न हुआ।

अपवाद विवरण: System.IO.FileLoadException: फ़ाइल या असेंबली को लोड नहीं कर सका 'System.Web.Http.WebHost, संस्करण = 5.0.0.0, संस्कृति = तटस्थ, PublicKeyToken = 31bf3856adv646435' या इसकी एक निर्भरता। स्थित असेंबली की प्रकट परिभाषा असेंबली संदर्भ से मेल नहीं खाती है। (HRESULT से अपवाद: 0x80131040)

स्रोत त्रुटि:

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

असेंबली लोड ट्रेस: ​​निम्न जानकारी यह निर्धारित करने में सहायक हो सकती है कि असेंबली का सिस्टम 'System.Web.Http.WebHost, संस्करण = 5.0.0.0, संस्कृति = तटस्थ, PublicKeyToken = 31bf3856ad364e35 लोड नहीं किया जा सका।

WRN: असेंबली बाइंडिंग लॉगिंग बंद कर दी गई है। असेंबली बाइंड विफलता लॉगिंग को सक्षम करने के लिए, रजिस्ट्री मान [HKLM \ Software \ Microsoft \ Fusion! EnableLog] (DWORD) को 1. नोट पर सेट करें: असेंबली बाइंड विफलता लॉगिंग के साथ संबद्ध कुछ प्रदर्शन जुर्माना है। इस सुविधा को बंद करने के लिए, रजिस्ट्री मान [HKLM \ Software \ Microsoft \ Fusion! EnableLog] को हटा दें।

निम्नलिखित web.config फ़ाइल का हिस्सा है।

  <system.web>
    <customErrors mode="Off"/>
    <compilation debug="true" targetFramework="4.5" />
    <httpRuntime targetFramework="4.5" />
    <authentication mode="Forms">
      <forms loginUrl="~/Account/Login" timeout="2880" />
    </authentication>
    <pages>
      <namespaces>
        <add namespace="System.Web.Helpers" />
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Optimization" />
        <add namespace="System.Web.Routing" />
        <add namespace="System.Web.WebPages" />
      </namespaces>
    </pages>
  </system.web>
  <system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
  <handlers>
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers></system.webServer>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="DotNetOpenAuth.Core" publicKeyToken="2780ccd10d57b246" />
        <bindingRedirect oldVersion="1.0.0.0-4.0.0.0" newVersion="4.1.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="DotNetOpenAuth.AspNet" publicKeyToken="2780ccd10d57b246" />
        <bindingRedirect oldVersion="1.0.0.0-4.0.0.0" newVersion="4.1.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="0.0.0.0-1.5.2.14234" newVersion="1.5.2.14234" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="EntityFramework" publicKeyToken="b77a5c561934e089" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>

जवाबों:


129

dllप्रकाशित (तैनात पर्यावरण) में याद आ रही है। यही कारण है कि यह स्थानीय यानी विजुअल स्टूडियो में काम कर रहा है, लेकिन एज़्योर वेबसाइट पर्यावरण में नहीं।

बस Copy Local = trueअसेंबली के लिए संपत्तियों में करें ( System.Web.Http.WebHost ) और उसके बाद एक रीडेपॉयल करें, यह ठीक काम करना चाहिए।

यदि आपको समान त्रुटि मिलती है अर्थात कोई अन्य असेंबली छूटी हुई है, तो उस असेंबली को कोपीलोकल बनाएं = सही और रिडेप्लॉय करें, इस पुनरावृत्ति को दोहराएं - यदि आप इसकी निर्भरता के बारे में अनिश्चित हैं।


2
यह Copy Localपहले से ही सच है। अजीब तरह से यह दिखाता है कि Runtime Versionv5 के बजाय v4.0.30319 है?
ca9163d9

4
क्या आप जानते हैं कि यहां क्या हुआ था? मैं 18 महीने से ठीक चल रहा था जब यह उछल कर मुझसे लिपट गया।
ग्लेन गॉर्डन

2
यह मेरे लिए समस्या तय धन्यवाद! लेकिन यह मुझे अजीब लगता है कि हमें अपनी परियोजनाओं में फ्रेमवर्क लाइब्रेरी शामिल करनी है (मेरे मामले में एज़्योर नहीं बल्कि एक आईआईएस सर्वर)। क्या किसी को पता है कि इसका कुछ अपडेट चलाने का मामला है, इसलिए हमें अब उन्हें शामिल नहीं करना है?
एडगरपेट्रास्कस

1
मिनी ऐड-ऑन चूंकि मुझे कॉपी लोकल खोजने में हमेशा के लिए लग गया: VS2013 में, आप प्रोजेक्ट में "रेफरेंस" नोड खोलते हैं, और जिस लाइब्रेरी को आप "कॉपी लोकल" सेट करना चाहते हैं, उस पर राइट-क्लिक करें।
ArtHare

6
यदि कॉपी लोकल पहले से ही सही पर सेट है और निर्भरता के कारण आप वेबएपीआई को अपडेट नहीं कर सकते हैं, तो कॉपी लोकल को गलत, बिल्ड करने के लिए ट्रिक है, फिर कॉपी लोकल को सही और बिल्ड में सेट करें। मुझे नहीं पता कि यह क्यों काम करता है।
डे'एर्जगी

90

यदि आप अभी भी उत्तर की तलाश में हैं, तो इस प्रश्न सूत्र की जाँच करें । इसने मुझे एक समान समस्या को हल करने में मदद की।

संपादित करें: जिस समाधान ने मुझे Update-Package Microsoft.AspNet.WebApi -reinstallनौगेट पैकेज प्रबंधक से चलने में मदद की , जैसा कि पाथोसाइकिल द्वारा सुझाया गया था। मुझे तब अपनी .suo फ़ाइल को डिलीट करना पड़ा और VS को फिर से शुरू करना पड़ा, जैसा कि इस धागे में सर्गेई ओसिपचुक ने सुझाया था ।


कृपया केवल उत्तर देने के लिंक से बचें .. बल्कि कृपया उपरोक्त लिंक से प्रासंगिक जानकारी यहाँ पोस्ट करें ..
अन्वेश यमलारथी

3
अपडेट-पैकेज कमांड चलाने से समस्या हल हो गई, जबकि अन्य सुझावों में से किसी ने भी काम नहीं किया। जवाब के लिए धन्यवाद!
डिजिऑज़ मल्टीमीडिया

समस्या का सबसे अच्छा समाधान।
फेस्टिम काहनी

बिल्कुल सही जवाब, धन्यवाद!
अपोलो

3
इस समाधान ने मेरे लिए भी काम किया। मुझे पूरा यकीन है कि यह ReSharper की used Unused Assemblies ’की कार्यक्षमता के कारण हुआ है। अप्रयुक्त असेंबलियों को हटा दें कभी-कभी नेत्रहीन चेक नगेट पैकेज सामग्री के बिना असेंबलियों को हटा देता है।
जो राजा

54

मैं एक ही समस्या से मिला और मैंने इसे CopyLocalनिम्नलिखित कामों के लिए सच करने के लिए हल किया :

System.Web.Http.dll
System.Web.Http.WebHost.dll
System.Net.Http.Formatting.dll

मुझे जोड़ना होगा कि मैं MVC4 और NET 4 का उपयोग करता हूं


धन्यवाद यह मददगार था। क्या आप जानते हैं कि ये फाइलें सिर्फ GAC में क्यों नहीं होंगी? क्या यह इसलिए है क्योंकि विभिन्न साइटें विभिन्न डॉटनेट फ्रेमवर्क आदि का उपयोग कर सकती हैं?
डेलिजम

जैसा कि मुझे याद है कि यह समस्या तब से है जब Microsoft ने उस क्षेत्र में महत्वपूर्ण सुधार लागू किए थे (मुझे लगता है कि System.Web / ASP NET / MVC में)। मुझे लगता है कि ये नाम स्थान GAC में नहीं हैं (इसलिए मूल नेट असेंबलियों में नहीं) लेकिन अलग-अलग विज़ुअल स्टूडियो या MVC रास्तों में।
ब्रोनक

इसने मेरे VPS पर समस्या का समाधान किया (यह न केवल समस्या है)
Evilripper

इसने मेरे लिए काम किया (हालाँकि मैं अज़्योर का उपयोग नहीं कर रहा हूँ)। मैं एक .net 4.5 फ्रेमवर्क वातावरण से एक 4.0 एक नीचे एक परियोजना को आगे बढ़ा रहा था और सब कुछ के अंत में यह मुद्दा मिला।
TheQ

1
ऊपर दिए गए डेरेआगे के सुझाव के अनुसार, मेरे पास पहले से ही इन सभी Dll में से 3 के लिए LOCAL COPY = सच था। लेकिन इस सुझाव ने समस्या को हल कर दिया: "यदि कॉपी लोकल पहले से ही सच है, तो कॉपी लोकल को गलत, बिल्ड करने के लिए ट्रिक है, फिर कॉपी लोकल को सही और बिल्ड में सेट करें। मुझे नहीं पता कि यह क्यों काम करता है। - डेएर्जेई 19 नवंबर '15 17:16 पर
डेबी ए

34

मेरे लिए web.configफ़ाइल में निम्न अनुभाग जोड़ने का काम किया :

<configuration>
...
    <runtime>
    ...
        <dependentAssembly>
            <assemblyIdentity name="System.Web.Http.WebHost" publicKeyToken="31bf3856ad364e35" culture="neutral" />
            <bindingRedirect oldVersion="0.0.0.0-5.1.0.0" newVersion="5.1.0.0" />
        </dependentAssembly>
    ...
    </runtime>
...
</configuration>

यह उदाहरण MVC 5.1 के लिए है। आशा है कि यह किसी को इस तरह के मुद्दे को हल करने में मदद करेगा।


2
आप कमाल के है। mvc5 में एक आकर्षण की तरह काम किया। धन्यवाद
डेविड Graça

2
धन्यवाद, मेरे लिए भी काम किया +1, जिस व्यक्ति ने यह सवाल पूछा था, उसे उत्तर के रूप में चिह्नित करना चाहिए!
रे

या सिर्फ Microsoft.AspNet.WebApi.WebHostनगेट के माध्यम से पैकेज जोड़ें ।
ऑप्टिमैक्स

15

मेरे लिए इसने "डायलॉग पर अतिरिक्त फाइलें हटाएं" का चयन करने के बाद काम करना शुरू कर दिया।


मेरे लिए काम किया! अच्छा है।
डॉ। शिज़ो

यहाँ केवल यही एक उपाय है जो मेरे लिए काम करता है। मुझे लगता है कि वहाँ एक dll के कुछ अन्य पुराने संस्करण थे जो चीजों को ट्रिप करते थे। धन्यवाद!
ओहद श्नाइडर

10

प्रकाशित (परिनियोजित वातावरण) में dll गायब है। यही कारण है कि यह स्थानीय यानी विजुअल स्टूडियो में काम कर रहा है, लेकिन एज़्योर वेबसाइट पर्यावरण में नहीं।

असेंबली के लिए गुणों में बस स्थानीय = प्रतिलिपि कॉपी करें (System.Web.Http.WebHost) और फिर एक redeploy करते हैं, यह ठीक काम करना चाहिए।


यहाँ भी, यह वही है जिसकी आवश्यकता थी।
पाब्लोउस्तोंडो

1
शायद इसलिए कि एक ही समाधान एक साल पहले कई अन्य जवाबों में वर्णित है।
चाड

6

मैं vs2012 का उपयोग कर रहा हूं और मुझे लगता है कि अद्यतन KB2781514 ने कुछ सेटिंग बदल दी है। मेरे MVC4 प्रोजेक्ट में मेरे सभी System.Web.Http झूठे में बदल गए और मुझे यह संदेश प्राप्त हुआ। मैंने All file in this projectप्रकाशित संपत्ति में परिवर्तन किया था, लेकिन काम नहीं कर रहा था। अंत में मुझे Copy Local = trueएक-एक करके बदलना होगा और इस समस्या को हल करना होगा।


2

मुझे वही त्रुटि मिली और मैंने अपना संस्करण 4 से 3 में बदल दिया और इसे हल किया गया:

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <!-- Ensure correct version of MVC -->
    <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35"/>
        <bindingRedirect oldVersion="0.0.0.0-3.0.0.0" newVersion="3.0.0.0"/>
    </dependentAssembly>
</assemblyBinding>

2

मुझे अपने आवेदन में यही समस्या थी।

System.web.http.webhost not found.

आपको बस system.web.http.webhostअपने मुख्य प्रोजेक्ट से फाइल कॉपी करने की आवश्यकता है जिसे आप विजुअल स्टूडियो में चलाते हैं और इसे अपनी प्रकाशित परियोजना binनिर्देशिका में पेस्ट करते हैं ।

इसके बाद यह वही त्रुटि दिखा सकता है लेकिन निर्देशिका नाम बदल गया है यह हो सकता है system.web.http। ऊपर के रूप में एक ही प्रक्रिया का पालन करें। यह सभी फाइलों के अपलोड होने के बाद काम करेगा। विजुअल स्टूडियो में नगेट पैकेज के कारण वे इंटरनेट से डाउनलोड करते हैं लेकिन सर्वर पर इसे डाउनलोड करने में सक्षम नहीं हैं।

आप इस फाइल को अपने प्रोजेक्ट binडायरेक्टरी में पा सकते हैं ।


1

यह मेरे लिए VS2013 (अपडेट 5) /ASP.NET 4.5, प्रोजेक्ट प्रकार "वेब एप्लिकेशन" के तहत हुआ जिसमें एमवीसी और वेब एपीआई शामिल हैं। प्रोजेक्ट बनाने के बाद और किसी भी कोड को जोड़ने से ठीक पहले त्रुटि हुई। निम्नलिखित कॉन्फ़िगरेशन को जोड़ना मेरे लिए इसे ठीक करता है। "System.Web.Helpers" को हल करने के बाद "System.Web.Mvc" और "System.Web.WebPages" के लिए दो समान त्रुटियाँ सामने आईं।

<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.2.3.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
      </dependentAssembly>

0

मुझे कई DLL याद आ रहे थे। भले ही मैंने मैन्युअल रूप से उन्हें निर्देशिका में कॉपी किया, अगली बार जब मैंने प्रकाशित किया तो वे गायब हो गए। प्रत्येक को पहले से ही वीएस में स्थानीय रूप से कॉपी करने के लिए सेट किया गया था। मेरे लिए यह तय था कि हर एक को स्थानीय रूप से कॉपी करना, सहेजना, बनाना और फिर स्थानीय रूप से सच की प्रतिलिपि बनाने के लिए हर एक को सेट करना था। इस बार जब मैंने सभी DLL को सही तरीके से प्रकाशित किया। अजीब


0

यदि आपके समाधान में कई परियोजनाएँ हैं और आपकी कोई परियोजना इस त्रुटि के कारण निर्मित नहीं हो पाती है, तो सुनिश्चित करें कि आपने उस परियोजना में WebApi Core नगेट पैकेज स्थापित किया है। केवल System.Web.Http के संदर्भ को जोड़ने से मदद नहीं मिलती है, आपको उस परियोजना में सही नगेट पैकेज को स्थापित करने की आवश्यकता है।

मेरे समाधान में मेरी कई परियोजनाएँ थीं और WebApi Core पहले से ही किसी अन्य प्रोजेक्ट में स्थापित था। मैंने System.Web.Http असेंबली को राइट-क्लिक करके और असेंबली को लिस्ट से टिकटिक करके संदर्भित किया था और यह Azure पर काम नहीं करता था, हालाँकि स्थानीय रूप से यह ठीक होगा। मुझे मैनुअल संदर्भ को हटाने और प्रत्येक प्रोजेक्ट के लिए WebApi Core nuget पैकेज को जोड़ना था जिसे विधानसभा संदर्भ की आवश्यकता थी।


0

यदि "कॉपी लोकल" पहले से ही सही है तो इस स्थिति में, मुझे लगता है कि यह काम करने के लिए कभी-कभी होता है यदि आप उन फ़ाइलों को हटा देते हैं जहां इसे प्रकाशित किया गया है और फिर से प्रकाशित करें।

उदाहरण के लिए यदि आप IIS का उपयोग कर रहे हैं, तो वेबसाइटों और उस निर्देशिका की सामग्री को हटा दें, जिसे वे प्रकाशित हैं, और फिर से प्रकाशित करें।

गंतव्य पर फ़ाइलों के पुराने संस्करण हो सकते हैं, इसलिए यह सुनिश्चित करने के लिए कि आप पुराने संस्करणों का उपयोग नहीं कर रहे हैं, फिर से प्रकाशित करने से पहले सब कुछ हटा दें।


0

मैंने web.config से निम्न प्रविष्टि को हटा दिया और इसने मेरे लिए काम किया।

<dependentAssembly>
                <assemblyIdentity name="System.Web.Http.WebHost" culture="neutral" publicKeyToken="31BF3856AD364E35" />
                <bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="5.2.6.0" />
            </dependentAssembly>

0

सुनिश्चित करें कि समाधान में पैकेज संस्करण समान है। मैंने Microsoft.AspNet.Mvcसमाधान के दौरान और समस्या हल किए गए पैकेज को डाउनग्रेड और अपग्रेड किया।

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