2016-07-16 11 views
33

मैंने अपनी परियोजना को केवल एक दृश्य विंडोज 10 मशीन पर कॉपी किया है जिसमें केवल विजुअल स्टूडियो 2015 समुदाय और एसक्यूएल है सर्वर 2016 एक्सप्रेस स्थापित। विंडोज 10 और वीएस2015 या एसक्यूएल सर्वर के साथ स्थापित किए गए अलावा अन्य कोई फ्रेमवर्क संस्करण स्थापित नहीं हैं।फ़ाइल या असेंबली लोड नहीं कर सका "System.Net.Http, संस्करण = 4.0.0.0, संस्कृति = तटस्थ, PublicKeyToken = b03f5f7f11d50a3a"

जब मैं 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" /> 

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

फ़ाइल के पथ अंक:

C: \ Program Files (x86) \ संदर्भ विधानसभाओं \ Microsoft \ Framework.NETFramework \ v4.6.1 \ System.Net.Http.dll

C: करने के लिए System.Net.Http.Formatting अंकों की

फ़ाइल के पथ \ विकास \ MyApp \ संकुल \ Microsoft.AspNet.WebApi.Client.5.2.3 \ lib \ net45 \ System.Net.Http.Formatting.dll

क्या संपूर्ण परियोजना लक्ष्य 4.5.1 या सही असेंबली का संदर्भ देने का एक और तरीका है?

+0

आप NuGet पैकेज से वेब एपीआई को पुनर्स्थापित करने की कोशिश की है निकालना चाहते हैं? –

+0

संबंधित: http://stackoverflow.com/questions/19491860/could-not-load-file-or-assembly-system-web-http-4-0-0-after-update-from-2012- –

+0

कोशिश की उस SO प्रश्न में सभी सुझाए गए उत्तर। अभी तक कुछ भी काम नहीं करता है। मैंने उपयोग किए जा रहे सभी nuget संकुल के लिए 'update-package xxx -reinstall' भी चलाया है। यह या तो काम नहीं करता है। –

उत्तर

67

मेरे web.config (या app.config) में बाध्यकारी जानकारी को बदलना - मेरे दृश्य में "हैक" होने पर, आपको अपने प्रोजेक्ट के साथ आगे बढ़ने की अनुमति देता है, एक NuGet पैकेज अपडेट के बाद आपके एप्लिकेशन को मारता है और आपको सिस्टम देता है .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> 
+1

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

+1

ने मेरे मुद्दों को हल किया, बहुत धन्यवाद, 1000 अंगूठे यह – user1505015

+0

को हल करने का प्रयास करने में कुछ समय हो गया है, यह लगभग हर चीज की कोशिश करने के बाद भी मेरे लिए काम करता था, जिसे मैं सोच सकता था। –

3

मैं एक ही मुद्दा है और एक ही रास्ता मैं कैसे इसे ठीक करने में सक्षम हूँ app.confing के लिए कैसे लिखा @ tripletdad99 bindingRedirect जोड़ने है।

लेकिन यदि आपके पास अधिक प्रोजेक्ट के साथ समाधान है तो वास्तव में हर परियोजना को अपडेट करके चूसना है (और कभी-कभी कुछ नुजेट पैकेज को अद्यतन करने के बाद आपको इसे फिर से करने की आवश्यकता होती है)। और यही वजह है कि मैंने सरल पावरहेल स्क्रिप्ट लिखी, जो कि सभी 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" 

शायद यह सही नहीं है और भी बेहतर हो सकता है अगर किसी को पहले से निर्माण कार्य से लिंक करें।

7

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

0

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

1

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

4

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

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

<PropertyGroup> <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType> </PropertyGroup>

  1. बिल्ड करें।
  2. बिन फ़ोल्डर में, (WebAppName).dll.config फ़ाइल होना चाहिए।
  3. इसमें इसमें रीडायरेक्ट होना चाहिए। web.config
  4. करने के लिए इन कॉपी ऊपर csproj फ़ाइल से कतरना फिर
  5. यह काम करना चाहिए
संबंधित मुद्दे

 संबंधित मुद्दे