Nie można załadować pliku lub zestawu System.Net.Http, Version = 4.0.0.0 z ASP.NET (MVC 4) Web API OData Prerelease

81

Problem

Po zainstalowaniu pakietu Microsoft ASP.NET Web API OData 5.0.0-rc1 prerelease kończy się następującym wyjątkiem:

Nie można załadować pliku lub zestawu „System.Web.Http, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35” lub jednej z jego zależności. Definicja manifestu zlokalizowanego zestawu nie jest zgodna z odwołaniem do zestawu. (Wyjątek od HRESULT: 0x80131040)

Mój projekt MVC 4 jest zupełnie nowy i naprawdę mały, nie ma w nim nic nadzwyczajnego. Celuję w .NET Framework 4.5

Potrzebuję tego pakietu NuGet, aby zaimplementować PATCH przy użyciu klasy Delta (gdy używam wersji 4.0.0.0 pakietu, klasa Delta nie działa).

Jak mogę to naprawić?

Moje wersje System.Web.Http

W GAC mam wersję 5.0.0.0 System.Web.Http

gacutil -l System.Web.Http Globalna pamięć podręczna zestawów zawiera następujące zestawy: System.Web.Http, Version = 5.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35, processorArchitecture = MSIL

W programie Visual Studio podczas przeglądania zestawów dana wersja System.Web.Http to 4.0.0.0 (dlaczego?)

W moim projekcie odniesienie do System.Web.Http

  • Ma wersję 5.0.0.0
  • Wskazuje folder \ lib \ net45 \ pakietu
  • Ma CopyLocal = true

Rzeczy, których próbowałem

Próbowałem powiązać przekierowanie v 4.0.0.0 z 5.0.0.0 w Web.config

<dependentAssembly>
    <assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="4.0.0.0-4.0.0.0" newVersion="5.0.0.0" />
</dependentAssembly>

Ale daje mi kolejny wyjątek:

Próba dostępu metody „System.Web.Http.GlobalConfiguration..cctor ()” do pola „System.Web.Http.GlobalConfiguration.CS $ <> 9__CachedAnonymousMethodDelegate2” nie powiodła się.

Wydaje mi się, że wersja 4.0.0.0 naprawdę musi być używana przez podstawowy silnik Web Api.

Powiązane pytania

Błąd analizy kodu Nie można załadować pliku lub zestawu „System.Net.Http, wersja = 2.0.0.0 w interfejsie API sieci Web MVC4 Nie można załadować pliku lub zestawu” System.Net.Http, wersja = 2.0.0.0 w interfejsie API sieci Web MVC4

Yves M.
źródło
1
Może ta odpowiedź może ci pomóc: stackoverflow.com/a/18700279/795876
fsenart

Odpowiedzi:

164

Visual Studio 2013 ma nową funkcję, która tym zajmuje się. Podczas kompilowania aplikacji należy zobaczyć ostrzeżenia dotyczące różnych wersji zestawu, do którego się odwołuje. Kliknij dwukrotnie ostrzeżenie, aby dodać przekierowania powiązań zestawu do pliku web.config.

Zobacz http://msdn.microsoft.com/en-us/library/2fc472t2.aspxWięcej informacji pod .

jeff.eynon zauważa poniżej, że musisz mieć wyewidencjonowany plik web.config (jeśli używasz kontroli źródła TFS), aby VS mógł automatycznie edytować plik. Dzięki za wskazówkę!

Jay Douglass
źródło
7
Chciałbym móc zagłosować za tym 10 razy. Automatyczne wykonanie tego przez VS było miłe. Dziękuję za wskazówkę!
Bob Horn
4
Niestety nie zawsze to działa. W rzeczywistości powiedziałbym częściej niż nie, dwukrotne kliknięcie tego ostrzeżenia nic nie robi.
Trevor de Koekkoek
3
Musisz wyrejestrować modyfikowaną konfigurację sieci / aplikacji. Z jakiegoś powodu VS nie wydaje się być skłonny do sprawdzenia pliku w tym przypadku.
jeff.eynon
39

Zrobiłem to, aktualizując pakiet WebApi do wersji wstępnej przy użyciu nuget:

PM> Microsoft.AspNet.WebApi -Pre

Aby wymusić na projekcie korzystanie z najnowszej wersji WebApi, konieczne były pewne modyfikacje w głównym pliku Web.config:

1) Wersja stron internetowych od 2.0.0.0 do 3.0.0.0

<appSettings>
    <add key="webpages:Version" value="3.0.0.0" />
</appSettings>

2) Przekierowanie powiązania do 5.0.0.0 dla System.Web.Http i System.Net.Http.Formatting

<dependentAssembly>
    <assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
</dependentAssembly>
<dependentAssembly>
    <assemblyIdentity name="System.Net.Http.Formatting" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
</dependentAssembly>

Myślę, że to wszystko

PS: Rozwiązanie zainspirowane WebAPI OData 5.0 Beta - dostęp do GlobalConfiguration generuje błąd bezpieczeństwa

Yves M.
źródło
3
to zadziałało dla mnie - napotkałem ten sam problem po zainstalowaniu najnowszego pakietu interfejsu API sieci Web CORS z powodu zaktualizowanej zależności system.net.http.
sandeep talabathula
1
ty rockman, wielkie dzięki. W moim przypadku konfiguracja sieci Web nie została zaktualizowana przez przywracanie NuGet, zrobiłem to ręcznie po wdrożeniu.
Leandro
Podobnie, otrzymujesz +1, ponieważ jeśli VS nie robi tego za Ciebie, potrzebujesz tej odpowiedzi, aby móc samodzielnie wykonać wiązanie.
Michael Blackburn,
11

Spotkałem ten sam problem i rozwiązałem go, ustawiając CopyLocal na true dla następujących bibliotek:

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

Muszę dodać, że używam MVC4 i NET 4

Bronek
źródło
1
rozwiązało to również dla mnie - jednak naprawdę chciałbym wiedzieć, co to właściwie oznacza?
serup
11

Wystąpił ten problem, gdy próbowałem zaktualizować projekt Hot Towel z szablonu projektu i kiedy utworzyłem pusty projekt i zainstalowałem HotTowel za pośrednictwem nuget w VS 2012 od 23.10.2013.

Aby to naprawić, zaktualizowałem za pośrednictwem Nuget Web Api Web Host i pakiety Web API do wersji 5.0, bieżącej wersji w NuGet w tej chwili (23.10.2013).

Następnie dodałem wiążące wskazówki:

<dependentAssembly>
  <assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" culture="neutral" />
  <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
</dependentAssembly>
<dependentAssembly>
  <assemblyIdentity name="System.Net.Http.Formatting" publicKeyToken="31bf3856ad364e35" culture="neutral" />
  <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
</dependentAssembly>
Kevin LaBranche
źródło
8

Lub możesz to zrobić z konsoli Menedżera pakietów NuGet

 Install-Package Microsoft.AspNet.WebApi -Version 5.0.0

Następnie będziesz mógł dodać odwołanie do System.Web.Http.WebHost 5.0

Sameer Alibhai
źródło
4

Usuń System.Web.Http i System.Net.Http.Formatting z odniesień i Dodaj odniesienia z powrotem, przechodząc do folderu bin (gdzie zostały skopiowane przez nuget) Teraz wersja pliku to 5.0.0.0

JJ_Coder4Hire
źródło
1

Ten błąd pojawił się kilka razy w kilku różnych projektach.

W końcu doszedłem do wniosku, że kiedy będę budował, w moim folderze bin znajdowała się już kopia zestawu binarnego system.web.mvc.

Aby to naprawić, kliknij prawym przyciskiem myszy zespół na liście odniesień i wybierz „Właściwości”. Sprawdź, czy jest to najnowsza wersja, patrząc na właściwość „Wersja”. Jeśli tak, przełącz opcję „Copy Local” na true.

Pozwoli to upewnić się, że wersja, do której odwołuje się projekt, jest wersją, która trafi do folderu plików binarnych.

Jeśli nadal pojawia się błąd, spróbuj uruchomić nuGet, aby pobrać najnowszą wersję, a następnie spróbuj ponownie wykonać powyższe czynności.

Powodzenia - ten błąd jest uciążliwy!

user1628627
źródło
1

Napotkałem ten sam błąd. Kiedy zainstalowałem Unity Framework for Dependency Injection, w mojej konfiguracji zostały dodane nowe odwołania do Http i HttpFormatter. Oto kroki, które wykonałem.

Uruchomiłem następującą komendę w konsoli nuGet Package Manager: PM> Install-Package Microsoft.ASPNet.WebAPI -pre

Dodano fizyczne odniesienie do biblioteki dll w wersji 5.0

Chandra Prakash Soni
źródło
1

rozwiązuję w drodze nuget. pierwszy, który zainstalujesz nuget. sekundę, której używasz.
ilustracja poniżej:

po trzecie: sprawdź, czy jest to najnowsza wersja, patrząc na właściwość „Wersja”.

Na koniec: ponownie sprawdzasz, czy projekt ma najnowszą wersję.

Nguyễn Thị Nữ
źródło
0

Napotkałem problem tego samego typu i wykonałem poniższe kroki, aby rozwiązać problem

Przejdź do Narzędzia -> Menedżer pakietów bibliotecznych -> Konsola Menedżera pakietów i uruchom poniższe polecenie

Zainstaluj pakiet Microsoft.ASPNet.WebAPI -pre

Santu Ghosh
źródło
0

Po zmodyfikowaniu odwołań w Web.config pliku, jak wspomniano powyżej, rozwiązaliśmy odniesienia.

Miałem podobny problem.

Dla nas mamy odniesienie Microsoft.Data.Edm.dlli OData.dlloraz inne zespoły z Program Files:

C:\Program Files (x86)\Microsoft WCF Data Services\5.0
                          \bin\.NETFramework\Microsoft.Data.Edm.dll

i

C:\Program Files (x86)\Microsoft WCF Data Services\5.0
                        \bin\.NETFramework\Microsoft.Data.OData.dll

a wersja to 5.6.4 .

Po zmianie odniesienia obu zestawów C:\....Project\packages\Microsoft.Data.Edm.5.6.0na problem został rozwiązany

Gaurav Gupta
źródło
0

Wszedłem do menedżera pakietów NuGet i zaktualizowałem moje pakiety. Teraz działa. Głównym, który zaktualizowałem, był Microsoft.AspNet.WebApi.Core. Może być konieczne zrobienie tego w przypadku obu projektów, aby zsynchronizować odpowiednie odwołania.

Exzile
źródło
0

Jeśli ten problem wystąpi, sprawdź plik web.config w poniższej sekcji

Poniższa sekcja zawiera wersję używanej biblioteki DLL

po sprawdzeniu tej sekcji w web.config otwórz eksplorator rozwiązań i wybierz odniesienie z drzewa projektu, jak pokazano. Eksplorator rozwiązań-> Odniesienie

Po rozwinięciu odwołania znajdź bibliotekę dll, która spowodowała błąd. Kliknij prawym przyciskiem myszy odniesienie dll i sprawdź wersję, jak pokazano na powyższym obrazku.

Jeśli zarówno wersja config dll, jak i plik DLL, do którego się odwołuje, są różne, otrzymasz ten wyjątek. Upewnij się, że oba są w tej samej wersji, która może pomóc.

user3235808
źródło