फ़ाइल या असेंबली लोड नहीं कर सका "System.Net.Http, संस्करण = 4.0.0.0, संस्कृति = तटस्थ, PublicKeyToken = b03f5f7f11d50a3a"


167

मैंने अपने प्रोजेक्ट को केवल विजुअल स्टूडियो 2015 कम्युनिटी और SQL सर्वर 2016 एक्सप्रेस के साथ एक साफ विंडोज 10 मशीन में कॉपी किया है। Windows 10 और VS2015 या SQL सर्वर के साथ इंस्टॉल किए गए के अलावा कोई अन्य फ्रेमवर्क संस्करण स्थापित नहीं हैं।

जब मैं WebApi प्रोजेक्ट शुरू करने का प्रयास करता हूं तो मुझे संदेश मिलता है:

फ़ाइल या असेंबली लोड नहीं कर सका "System.Net.Http, संस्करण = 4.0.0.0, संस्कृति = तटस्थ, PublicKeyToken = b03f5f7f11d50a3a" या इसकी निर्भरता में से एक। सिस्टम निर्दिष्ट फाइल का पता लगाने में नाकामयाब रहा।

परियोजना के पैकेजों में शामिल हैं:

<package id="Microsoft.AspNet.WebApi" version="5.2.3" targetFramework="net45" />
<package id="Microsoft.AspNet.WebApi.Client" version="5.2.3" targetFramework="net45" />
<package id="Microsoft.AspNet.WebApi.Core" version="5.2.3" targetFramework="net45" />
<package id="Microsoft.AspNet.WebApi.Tracing" version="5.2.3" targetFramework="net45" />
<package id="Microsoft.AspNet.WebApi.WebHost" version="5.2.3" targetFramework="net45" />

.NET फ्रेमवर्क 4.6.1 के साथ प्रोजेक्ट बनाने के बाद, System.Net.Httpफ़ाइल binफ़ोल्डर में नहीं मिली है ।

फ़ाइल का पथ निम्न को इंगित करता है:

C: \ Program Files (x86) \ Reference Assemblies \ Microsoft \ Framework.NETFramework \ v4.6.1 \ System.Net.Http.dll

इस बिंदु पर फ़ाइल का पथ System.Net.Http.Formatting:

C: \ विकास \ MyApp \ संकुल \ Microsoft.AspNet.WebApi.Client.5.2.3 \ lib \ net45 \ System.Net.Http.Formatting.dll

क्या पूरे प्रोजेक्ट को 4.5.1 का टारगेट देना चाहिए या सही असेंबलियों को रेफर करने का कोई और तरीका है?


क्या आपने NuGet पैकेज से Web Api को पुन: स्थापित करने का प्रयास किया है?
मिहाई अलेक्जेंड्रू-आयनुत


उस SO प्रश्न में सभी सुझाए गए उत्तरों की कोशिश की। अभी तक कुछ भी काम नहीं हुआ। मैं उन update-package xxx -reinstallसभी नगेट पैकेजों के लिए भी दौड़ा हूँ जिनका मैं उपयोग कर रहा हूँ। यह भी काम नहीं करता है।
इवान-मार्क डेबोनो


बस इसे देखें, बाद में मुझे stackoverflow.com/questions/50536842/…
रागुल

जवाबों:


113

निम्नलिखित चरणों का पालन करें,

  1. दृश्य स्टूडियो को नवीनतम संस्करण में अपडेट करें (यह मायने रखता है)
  2. सभी बाइंडिंग रीडायरेक्ट को निकालें web.config
  3. इसे .csprojफ़ाइल में जोड़ें :

    <PropertyGroup>
      <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
      <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
    </PropertyGroup>
  4. प्रोजेक्ट बनाएं
  5. में binफ़ोल्डर एक होना चाहिए (WebAppName).dll.configफ़ाइल
  6. इसमें पुनर्निर्देश होना चाहिए, इन्हें कॉपी करें web.config
  7. .csprojफ़ाइल से ऊपर की गई तस्वीर हटा दें

यह काम करना चाहिए


1
अब im फ़ाइल या असेंबली लोड नहीं कर सका 'Newtonsoft.Json, Version = 6.0.0.0, संस्कृति = तटस्थ, PublicKeyToken = 30ad4fe6b2a6aeed' या इसकी एक निर्भरता। स्थित असेंबली की प्रकट परिभाषा असेंबली संदर्भ से मेल नहीं खाती है। (HRESULT से अपवाद: 0x80131040)
EK_AllDay

2
आपको जनरेट की गई फ़ाइल से बाइंडिंग रीडायरेक्ट को कॉपी करना याद रखना चाहिए, इसलिए पहली बार आपको उपरोक्त त्रुटि मिलेगी, लेकिन जेनरेट किए गए के रूप में उपर्युक्त वर्णित वेबपनाम (webappname) .dll.config प्राप्त करने के लिए बिन फ़ोल्डर मिला। अपने web.config में, फिर से संकलित करें। यह वास्तव में मेरी मदद करता है, सुनिश्चित करें कि आप पहले संदर्भ के रूप में कई संदर्भों को साफ करने के लिए नगेट समेकन उपकरण का उपयोग कर सकते हैं।
क्रिस स्हेलर

4
गजब का। यह वास्तव में मेरे लिए काम किया। @EK_AllDay आपको असेंबली रीडायरेक्ट को मूल वेब में कॉपी करना होगा ।config।
डेविड डी स्लोवरे सेप

3
⭐☝ किंवदंती बिल्ला यहीं हकदार थे! बस एक साइड-नोट, जब मैंने असेंबली रीडायरेक्ट्स को वापस वेब में कॉपी किया ।config, मैं देखता हूं कि अब System.Net.Http के लिए कोई बाध्यकारी नहीं है । इसलिए हम मानते हैं कि वी.एस. अब अपने स्वयं के संस्करण के बजाय .Net फ्रेमवर्क के साथ पैक किए गए डिफ़ॉल्ट असेंबली का उपयोग कर रहा है?
EvilDr

1
इस जवाब ने मुझे कई बार बचाया और मैंने गिनती भी बंद कर दी। उत्तर IMHO के रूप में चिह्नित किया जाना चाहिए।
सेबेस्टियन बुडका

258

मेरी web.config (या app.config) में बाध्यकारी जानकारी को बदलना - मेरे विचार में "हैक" करते समय, एक NuGet पैकेज अपडेट आपके आवेदन को रद्द करने और आपको System.Net.Http देने के बाद आपको अपनी परियोजना के साथ आगे बढ़ने की अनुमति देता है। त्रुटि।

NewVersion = "4.0.0.0" सेट करें

<dependentAssembly>
    <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-4.1.1.0" newVersion="4.0.0.0" />
</dependentAssembly>

4
मैंने Azure को एक बार, बिना किसी मुद्दे के साथ तैनात किया, फिर 15 मिनट बाद, एक परिनियोजन परिनियोजन ने मुझे ओपी में बताई गई सटीक त्रुटि दी और इस सटीक उत्तर के साथ सर्वर पर web.config को ट्विक करके मेरा मुद्दा ठीक किया। लेकिन, मुझे नहीं पता कि इसने पहली बार काम क्यों किया। मैं तैनाती के बीच अपनी निर्भरता के साथ खिलवाड़ नहीं किया।
bkwdesign

8
बहुत बढ़िया। मैं देख सकता हूं कि क्या हुआ था, मैंने एक बेस डोमेन प्रोजेक्ट में एक पैकेज स्थापित किया था जिसे मुझे पूरा यकीन है कि System.Net.Http नगेट स्थापित किया गया था (शायद उच्च 4.1.x संस्करण का), और जैसे ही मैंने किया कि मुझे ये मिल गया हर जगह चेतावनी। इसने वेब प्रोजेक्ट के लिए समस्या को ठीक कर दिया, लेकिन किसी के ऊपर नगेट पैकेज को संदर्भित करने के लिए किसी से ऊपर की सलाह ने सभी परियोजनाओं को हटा दिया। क्या मैं केवल वही हूं जो पुराने और नए .NET के मिश्रण के बारे में चिंतित हूं, हालांकि जब यह संदर्भ में आता है? यह मुझे आमतौर पर स्थानीय dlls को नगेट पैकेज (dll नरक) के रूप में संदर्भित करने से डरता है।
निकोलस पीटरसन

3
यहाँ Microsoft से जवाब है कि यह सही तरीका क्यों है: github.com/dotnet/corefx/issues/25773
ghanashyaml

18
बाध्यकारी पुनर्निर्देशन को हटाकर मेरे लिए पूरी तरह से काम किया।
sbkrogers

1
हां, केवल system.net.http और system.runtime की पंक्तियों को हटा दें। हालात फिर ठीक हो जाते हैं।
ZZZ

32

मेरी एक परियोजना में System.Net.Http के उच्च संस्करण के साथ एक नगेट पैकेज था। और मेरे स्टार्टअप प्रोजेक्ट में System.Net.Http v 4.0.0 का संदर्भ है, मैंने अभी-अभी अपने स्टार्टअप प्रोजेक्ट में System.Net.Http नगेट पैकेज स्थापित किया और समस्या हल हुई


मेरे पास एक समाधान में तीन परियोजनाएं हैं - चलो उन्हें कॉल करें A, Bऔर CAस्टार्टअप प्रोजेक्ट है, और इसका Bया तो कुछ भी नहीं है CCके लिए एक परीक्षण परियोजना है B। मेरे परीक्षण Cविफल रहे, क्योंकि मेरे पास एक संदर्भ (System.Net.Http) परियोजना नहीं Aथी।
रासमस ब Rकगार्ड

19

निम्नलिखित बदलें:

<bindingRedirect oldVersion="0.0.0.0-4.1.1.2" newVersion="4.1.1.2" />

निम्नलिखित के साथ:

<bindingRedirect oldVersion="0.0.0.0-4.1.1.2" newVersion="4.0.0.0" />

web.config में


1
तुम एक गैंगस्टर हो। इससे मेरी समस्या हल हो गई!
लियोनार्डो वाइल्ड जूल

1
धन्यवाद @ लियोनार्डो गिल्ड
मुहम्मद वकास

12

यदि आपके समाधान में कई परियोजनाएँ हैं, तो विज़ुअल स्टूडियो में समाधान आइकन पर राइट-क्लिक करें और 'समाधान के लिए NuGet पैकेज प्रबंधित करें' चुनें, फिर अपनी सभी परियोजनाओं को समान संस्करण में समेकित करने के लिए चौथे टैब 'समेकित' पर क्लिक करें। DLLs। यह आपको समेकित करने के लिए संदर्भित विधानसभाओं की एक सूची देगा। सूची में प्रत्येक आइटम पर क्लिक करें, फिर दाईं ओर दिखाई देने वाले टैब में इंस्टॉल पर क्लिक करें।


4
AutoGenerateBindingRedirects का उपयोग करने के बारे में @sajeetharan के उत्तर के साथ इसे मिलाएं, ऐसा लगता है कि पुराने संस्करण या तो वीएस या नगेट पैकेज गलत बाध्यकारी बयान छोड़ सकते हैं। एक अच्छा साफ बाहर बहुत मदद कर सकता है।
क्रिस शॉलर

11

ऊपर बाँध-रीडायरेक्ट मेरे लिए काम नहीं किया तो मैं के संदर्भ में टिप्पणी की System.Net.Httpमें web.config। सब कुछ इसके बिना ठीक काम करने लगता है।

  <system.web>
    <compilation debug="true" targetFramework="4.7.2">
      <assemblies>
        <!--<add assembly="System.Net.Http, Version=4.2.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A" />-->
        <add assembly="System.ComponentModel.Composition, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
      </assemblies>
    </compilation>
    <customErrors mode="Off" />
    <httpRuntime targetFramework="4.7.2" />
  </system.web>

1
यह Visual Studio 2017 (15.9.4) में काम करता है और आपको DLL के प्रत्यक्ष संदर्भ के बजाय System.Net.Http (4.3.4) NuGet पैकेज के साथ निर्माण करने की अनुमति देता है। .NET 4.7.2 फ्रेमवर्क रिलीज के साथ जहाज। आईडीई के भीतर भेजे गए संदर्भ (कोई अन्य निर्भरता के साथ) का उपयोग करने के लिए ऐसा करें: 1) वेब / ऐप हटाएं। बंधन को पुनर्निर्देशित करें 2) System.Net.ttp 3 के लिए NuGet पैकेज निकालें "नया संदर्भ जोड़ें" और सीधे लिंक नए के लिए 4.2.0.0 उन जहाजों का निर्माण करें जो .NET 4.7 के साथ हैं।
एनोक्रॉनॉल - आनंदगोपाल परदेशू

यह मेरे लिए VS2019 में काम करता है, 4.6.1 से 4.7.2 तक एक ऐप को माइग्रेट करता है
cklimowski

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

9

आप अपने प्रोजेक्ट को .NET फ्रेमवर्क 4.7.2 में अपग्रेड करके इसे ठीक कर सकते हैं। इसका जवाब एलेक्स गियोडिया ने दिया - एमएसएफटी । कृपया उसे ऊपर ले जाएं क्योंकि वह वास्तव में इसका हकदार है!

यह .NET फ्रेमवर्क 4.7.1 में एक ज्ञात समस्या के रूप में प्रलेखित है।

वर्कअराउंड के रूप में आप इन लक्ष्यों को अपनी परियोजना में जोड़ सकते हैं। वे SGF को दिए गए संदर्भों की सूची से DesignFacadesToFilter को हटा देंगे (और एसजीएन किए जाने के बाद उन्हें वापस जोड़ देंगे)

<Target Name="RemoveDesignTimeFacadesBeforeSGen" BeforeTargets="GenerateSerializationAssemblies">
  <ItemGroup>
    <DesignFacadesToFilter Include="System.IO.Compression.ZipFile" />
    <_FilterOutFromReferencePath Include="@(_DesignTimeFacadeAssemblies_Names->'%(OriginalIdentity)')" 
        Condition="'@(DesignFacadesToFilter)' == '@(_DesignTimeFacadeAssemblies_Names)' and '%(Identity)' != ''" /> 
    <ReferencePath Remove="@(_FilterOutFromReferencePath)" />
  </ItemGroup>
  <Message Importance="normal" Text="Removing DesignTimeFacades from ReferencePath before running SGen." /> </Target>

<Target Name="ReAddDesignTimeFacadesBeforeSGen" AfterTargets="GenerateSerializationAssemblies">
  <ItemGroup>
    <ReferencePath Include="@(_FilterOutFromReferencePath)" />
  </ItemGroup>
  <Message Importance="normal" Text="Adding back DesignTimeFacades from ReferencePath now that SGen has ran." />
</Target>

एक अन्य विकल्प (मशीन चौड़ी) निम्नलिखित बाध्यकारी पुनर्निर्देशन को sgen.exe.config में जोड़ना है:

<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <dependentAssembly>
      <assemblyIdentity name="System.IO.Compression.ZipFile" publicKeyToken="b77a5c561934e089" culture="neutral" />
      <bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.0.0.0" />
    </dependentAssembly>
  </assemblyBinding>
</runtime> This will only work on machines with .NET Framework 4.7.1. installed. Once .NET Framework 4.7.2 is installed on that machine, this workaround should be removed.

ऊपर दिए गए लिंक प्रश्न पर यह उत्तर अब प्रासंगिक उत्तर है: stackoverflow.com/a/52883065/54289 विवरण के लिए उत्तर पर टिप्पणी देखें।
एनोक्रॉनॉल - आनंदपाल गोपाल

6

यह Visual Studio 2017 (15.9.4) के साथ .NET 4.7.2 में काम करेगा:

  • वेब / ऐप हटाएं। बंधन को पुनर्निर्देशित करें
  • System.Net.Http के लिए NuGet पैकेज निकालें
  • "नया संदर्भ जोड़ें" खोलें और सीधे नए 4.2.0.0 लिंक के साथ .NET 4.7.2 वाले जहाजों का निर्माण करें

! [छवि] (https://user-images.githubusercontent.com/38843378/50998531-b5bb3a00-14f5-11e9-92df-6c590c469349.png)


4

मेरे पास एक ही मुद्दा है और केवल एक तरीका है कि मैं इसे कैसे ठीक कर पा रहा हूं, यह जोड़ने के लिए बाध्यकारी है अप्रत्यक्ष रूप से app.confing कैसे लिखा है @ tripletdad99।

लेकिन अगर आपके पास अधिक प्रोजेक्ट के साथ समाधान है, तो वास्तव में हर प्रोजेक्ट को हाथ से अपडेट करें (और कभी-कभी कुछ नगेट पैकेज अपडेट करने के बाद आपको इसे फिर से करने की आवश्यकता होती है)। और यही कारण है कि मैंने सरल शिल्पी स्क्रिप्ट लिखी है जो यदि सभी app.configs।

 param(
    [string]$SourceDirectory,
    [string]$Package,
    [string]$OldVersion,
    [string]$NewVersion
)

Write-Host "Start fixing app.config in $sourceDirectory"
Write-Host "$Package set oldVersion to $OldVersion and newVersion $NewVersion"
Write-Host "Search app.config files.."
[array]$files = get-childitem $sourceDirectory -Include app.config App.config -Recurse | select -expand FullName
foreach ($file in $files)
{
    Write-Host $file
    $xml = [xml](Get-Content $file)
    $daNodes = $xml.configuration.runtime.assemblyBinding.dependentAssembly
    foreach($node in $daNodes)
    {
        if($node.assemblyIdentity.name -eq $package)
        {
            $updateNode = $node.bindingRedirect
            $updateNode.oldVersion = $OldVersion
            $updateNode.newVersion =$NewVersion
            Write-Host "Fix"
        }
    }
    $xml.Save($file)
}

Write-Host "Done"

उदाहरण का उपयोग कैसे करें:

./scripts/FixAppConfig.ps1 -SourceDirectory "C:\project-folder" -Package "System.Net.Http" -OldVersion "0.0.0.0-4.3.2.0" -NewVersion "4.0.0.0"

संभवतः यह सही नहीं है और यह भी बेहतर होगा कि कोई इसे पूर्व-निर्माण कार्य से जोड़ दे।


3

VS2017 में 4.6.1-2 उपयोगकर्ता अपने संस्करण के अवांछित प्रतिस्थापन का अनुभव कर सकते हैं। System.Net.Http द्वारा एक VS2017 या Msbuild 15 का उपयोग करना चाहता है।

हमने यह संस्करण यहां हटा दिया है:

C: \ Program Files (x86) \ Microsoft Visual Studio \ 2017 \ Professional \ MSBuild \ Microsoft \ Microsoft.NET.Build.Extensions \ net461 \ lib \ System.Net.Http.dll

और यहाँ:

C: \ Program Files (x86) \ Microsoft Visual Studio \ 2017 \ BuildTools \ MSBuild \ Microsoft \ Microsoft.NET.Build.Extensions \ net461 \ lib \ System.Net.Http.dll

फिर प्रोजेक्ट उस संस्करण के साथ बनाता है जिसे हमने NuGet के माध्यम से संदर्भित किया है।


1

मेरे पास यह था, लेकिन, यह इसलिए था क्योंकि मैंने एक NuGet पैकेज जोड़ा था जिसने बाध्यकारी पुनर्निर्देशन को अद्यतन किया था। एक बार जब मैंने पैकेज को हटा दिया, तो पुनर्निर्देश अभी भी थे। मैंने उन सभी को हटा दिया, और फिर अद्यतन-पैकेज-स्थापना रद्द की। इससे सही रीडायरेक्ट जोड़े गए।


0

.Net चौखटे संस्करण की जाँच करें।
मेरा मूल .net फ्रेमवर्क पुराना संस्करण है।
मैंने .net फ्रेमवर्क 4.6 स्थापित करने के बाद, यह समस्या स्वचालित रूप से हल हो गई है।


0

मेरे लिए, मैंने .Net फ्रेमवर्क के नवीनतम संस्करण (.Net फ्रेमवर्क 4.6.1 से 4.7.2 तक बदलाव) पर चलने के लिए अपनी परियोजना निर्धारित की थी।

सब कुछ काम किया है, कोई त्रुटि नहीं है और समस्या के बिना प्रकाशित किया गया है, और यह केवल संयोग से था कि मैं System.Net.ttp पर आया था। त्रुटि संदेश, एक छोटे से हार्ड-टू-नोटिस में दिखाया गया है, लेकिन वेबसाइट I पर महत्वपूर्ण एपीआई अनुरोध पर काम कर रहा हूँ।

मैं वापस 4.6.1 पर लुढ़का और सब कुछ फिर से ठीक हो गया।


0

मेरे लिए यह समस्या हल करने का एकमात्र तरीका (.NET 4.6.1) न केवल उस सिस्टम के लिए System.Net.Http V4.3.4 में एक Nuget संदर्भ जोड़ना था जो वास्तव में System.Net.Http का उपयोग करता था, बल्कि स्टार्टअप परियोजना (मेरे मामले में एक परीक्षण परियोजना)।

(जो अजीब है, क्योंकि सही System.Net.Http.dll परीक्षण परियोजना की बिन निर्देशिका में मौजूद है और .config असेंबलीबैंगिंग ठीक लग रही है, भी।)


0

नगेट (.Net अद्यतन और MVC अद्यतन सहित) का उपयोग करके एक पुरानी वेबसाइट को अपडेट कर रहा था।

मैंने VS2017 में System.Net.HTTP संदर्भ को हटा दिया (यह 2.0.0.0 संस्करण करने के लिए था) और संदर्भ को फिर से जोड़ा, जिसने फिर 4.2.0.0 दिखाया।

मैंने फिर नगेट का उपयोग करके एक टन 'पैकेज' को अपडेट किया और त्रुटि संदेश मिला, फिर देखा कि कुछ ने 2.0.0.0 के संदर्भ को रीसेट कर दिया था, इसलिए मैंने फिर से हटा दिया और फिर से जोड़ा और यह ठीक काम करता है ... विचित्र।

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