2016-07-16 39 views
33

Skopiowałem mój projekt do czystego komputera z systemem Windows 10 tylko z Visual Studio 2015 Community i SQL Zainstalowany serwer 2016 Express. Nie ma innych wersji frameworków oprócz tych zainstalowanych z Windows 10 i VS2015 lub SQL Server.Nie można załadować pliku lub zestawu "System.Net.Http, wersja = 4.0.0.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a"

Kiedy próbuję uruchomić projekt WebAPI otrzymuję komunikat:

Nie można załadować pliku lub zestawu "System.Net.Http, Version = 4.0.0.0, Culture = neutral, TokenKluczaPublicznego = b03f5f7f11d50a3a" lub jedną z jego zależności. System nie może odnaleźć określonego pliku.

pakiety projektu obejmują:

<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" /> 

Po zbudowaniu projektu z .NET Framework 4.6.1, System.Net.Http plik nie zostanie znaleziony w folderze bin.

ścieżka wskazuje plik do:

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

ścieżka

plik jest od System.Net.Http.Formatting punktów:

C: \ Development \ MojaAplikacja \ pakietów \ Microsoft.AspNet.WebApi.Client.5.2.3 \ lib \ net45 \ System.Net.Http.Formatting.dll

Czy cały cel projektu 4.5.1 czy jest inny sposób odniesienia do właściwych złożeń?

+0

próbowałeś przeinstalować Web API z pakietu Nuget? –

+0

powiązane: http://stackoverflow.com/questions/19491860/could-not-load-file-or-assembly-system-web-http-4-0-0-after-update-from-2012-to –

+0

Wypróbowane wszystkie sugerowane odpowiedzi w tym zadaniu. Nic nie działa tak daleko. Uruchomiłem również 'update-package xxx -reinstall' dla wszystkich pakietów nugetów, których używam. To też nie działa. –

Odpowiedz

67

Zmiana informacji o powiązaniu w moim pliku web.config (lub app.config) - podczas gdy "włamanie" w moim widoku pozwala na przejście do przodu z projektem po aktualizacji pakietu NuGet, która zapewnia obsługę aplikacji i daje systemowi Błąd .Net.Http.

Set 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

Zainstalowałem na platformie Azure, raz bez problemu, a następnie po 15 minutach, kolejne wdrożenie dało mi dokładny błąd podany w OP i poprawienie web.config na serwerze z tą dokładną odpowiedzią naprawił mój problem. Ale nie mam pojęcia, dlaczego to zadziałało za pierwszym razem. Nie zadzierałem z zależnościami między wdrożeniami. – bkwdesign

+1

rozwiązał moje problemy, bardzo dziękuję, 1000 kciuków w górę od jakiegoś czasu próbowałem rozwiązać ten problem. – user1505015

+0

To również zadziałało dla mnie, po wypróbowaniu prawie wszystkiego, co tylko mogłem wymyślić. –

3

Mam ten sam problem, a jedynym sposobem, w jaki sposób jestem w stanie go naprawić to dodać bindingRedirect do app.confing jak napisał @ tripletdad99.

Ale jeśli masz rozwiązanie z większym projektem, to naprawdę suck ręcznie zaktualizuj każdy projekt (a także czasami po aktualizacji pakietu Nuget musisz zrobić to ponownie). I to jest powód, dla którego napisałem prosty skrypt PowerShell, który jeśli wszystko 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" 

Przykład jak używać:

./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" 

Prawdopodobnie to nie jest idealne, a także, że będzie lepiej, jeśli ktoś odwołuje go do pre-build zadanie.

7

W jednym z moich projektów znajdowały się pakiety nuget z wyższą wersją System.Net.Http. aw moim projekcie startowym znajduje się odniesienie do System.Net.Http v 4.0.0, właśnie zainstalowałem System.Net.Http nuget package w moim projekcie startowym i problem został rozwiązany

0

Sprawdź wersję frameworka .net.
Moja oryginalna struktura .net jest starszą wersją.
Po zainstalowaniu platformy .NET Framework 4.6, ten problem jest automatycznie rozwiązywany.

1

Miałem to, ale to dlatego, że dodałem pakiet NuGet, który zaktualizował wiążące przekierowania. Po usunięciu pakietu przekierowania nadal tam były. Usunąłem je wszystkie, a następnie uruchomiłem update-package -reinstall. Dodano prawidłowe przekierowania.

4

Wykonaj następujące kroki,

  1. aktualizacja Visual Studio do najnowszej wersji (to ważne)
  2. usunąć wszystkie przekierowania wiążące od web.config
  3. dodać do pliku csproj:

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

  1. Kompilacja.
  2. W folderze bin powinien znajdować się plik (WebAppName).dll.config.
  3. Powinien zawierać przekierowania. Skopiować je do pliku web.config
  4. Usuń wyżej wycięte z pliku csproj ponownie
  5. To powinno działać
Powiązane problemy