Nie można załadować pliku lub zestawu „System.Net.Http.Formatting” lub jednej z jego zależności. System nie może odnaleźć określonej ścieżki

158

Mam małą aplikację MVC, której używam do ćwiczeń, ale teraz za każdym razem, gdy próbuję debugować, napotykam błąd:

Could not load file or assembly 'System.Net.Http.Formatting' or one of its dependencies. 
The system cannot find the path specified.

Wyszukałem w Google, ale nie mogę znaleźć rozwiązania. Używam .NET 4.5.

Nie może to być plik DLL, ponieważ używam .Net 4.5.

Norris
źródło
1
zobacz zależność tutaj .. nuget.org/packages/System.Net.Http.Formatting
Vishal Sharma
Próbowałem tego i nie zadziałało ... Zamiast tego w Menedżerze pakietów pojawia się błąd z informacją „NuGetCmdletUnhandledException, NuGet.PowerShell.Commands.InstallPackageCommand”
Norris

Odpowiedzi:

185

Ilekroć mam błąd NuGet, taki jak te, zwykle wykonuję następujące kroki:

  1. Przejdź do folderu pakietów w Eksploratorze Windows i usuń go.
  2. Otwórz program Visual Studio i przejdź do opcji Narzędzia > Menedżer pakietów bibliotek > Ustawienia menedżera pakietów, a pod pozycją Menedżera pakietów po lewej stronie znajduje się przycisk „Wyczyść pamięć podręczną pakietu”. Kliknij ten przycisk i upewnij się, że pole wyboru „Zezwalaj NuGet na pobieranie brakujących pakietów podczas kompilacji” jest zaznaczone.
  3. Wyczyść roztwór
  4. Następnie kliknij prawym przyciskiem myszy rozwiązanie w Eksploratorze rozwiązań i włącz Przywracanie pakietu NuGet
  5. Zbuduj rozwiązanie
  6. Uruchom ponownie program Visual Studio

Wykonanie wszystkich tych kroków prawie zawsze przywraca wszystkie pakiety i biblioteki DLL, których potrzebuję dla mojego programu MVC.


EDYTUJ >>>

W przypadku programu Visual Studio 2013 i nowszych krok 2) powinien brzmieć:

  1. Otwórz program Visual Studio i przejdź do pozycji Narzędzia > Opcje > Menedżer pakietów NuGet, a po prawej stronie znajduje się przycisk „Wyczyść pamięć podręczną pakietu”. Kliknij ten przycisk i upewnij się, że pola wyboru „Zezwalaj NuGet na pobieranie brakujących pakietów” i „Automatycznie sprawdzaj brakujące pakiety podczas kompilacji w programie Visual Studio” są zaznaczone.
Jordan_Walters
źródło
7
To zadziałało ... Rozwiązany problem ... Dzięki Jordan_Walters ... Nie mam wystarczającej liczby przedstawicieli, aby oddać głos ... w przeciwnym razie twoja pomoc została bardzo doceniona
Norris
10
Dobra rada, ale to nie rozwiązało mojego problemu z komunikatem „Nie można załadować pliku lub zestawu„ System.Net.Http.Formatting ”lub jednej z jego zależności. System nie może znaleźć określonej ścieżki”. Dla mnie musiałem przejść do Tools / NuGet Package Manager / Package Manager Console, a następnie „Update-Package -ProjectName MyProject -reinstall”. Wszystko naprawione!
GeoMac
3
@YuraZaletskyy Myślę, że jest w $ {SolutionDir} / packages /. To znaczy główny folder rozwiązania.
jakejgordon
1
Świetne wskazówki, dzięki, naprawdę mi pomogli. Mam nadzieję, że nie masz nic przeciwko temu, że dodałem więcej informacji, aby odzwierciedlić nowsze wersje programu Visual Studio.
Sheridan
1
Postępowałem zgodnie z powyższym, a mimo to błąd pozostał - ręcznie przejrzałem wersję dll i kiedy sprawdziłem mój plik web.config, były zduplikowane wpisy, po prostu zostaw jeden wpis pasujący do twojej wersji dll i wszystko powinno działać - zrobiło to dla mnie
JazziJeff
168
  • Usuń wszystkie odwołania do kodu do System.Net.*

  • w oknie pakietu,

    Install-Package Microsoft.AspNet.WebApi.Client

  • Wyczyść i odbuduj swój projekt

user3919888
źródło
2
Właśnie napotkałem ten problem i zainstalowałem najnowszą wersję pakietu NuGet Microsoft.AspNet.WebApi.Client, a następnie zobaczyłem System.Net.Http.Formatting na mojej liście referencji.
ewomack
Próbowałem wszystkiego innego. To jedyny, który działał dla mnie.
Timothy Kanski
Pracował dla mnie. Upewnij się, że instalujesz odpowiednią wersję.
CrusherJoe
1
To rozwiązanie zadziałało po zaktualizowaniu mojego Web.Config bindingRedirectfor System.Net.Http.Formattingi System.Web.Httpdo nowego zainstalowanego powyższą komendą ... czyli poszło z <bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0"/>do<bindingRedirect oldVersion="0.0.0.0-4.0.30319" newVersion="4.0.30319"/>
Serj Sagan
Czy w takim razie wielu z nas po prostu brakowało pakietu Microsoft.AspNet.WebApi.Client NuGet?
carlin.scott
27

Znalazłem dodatkowy

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

w moim web.config. usunąłem to, aby działało. jakiś inny pakiet, który zainstalowałem, a następnie usunąłem, spowodował problem.

realPT
źródło
skąd wiesz, jaki jest token publiczny wersji? b03f5f7f11d50a3a
eran otzap
Jest dodawany automatycznie za pomocą polecenia konsoli menedżera pakietów: Add-BindingRedirect *
Simon Hughes
18

user3919888 wskazał mi właściwy kierunek, ale musiałem uruchomić Update-Package -reinstall Microsoft.AspNet.WebApi.Clientw konsoli Package-Manager. Sama instalacja podstawowa nie rozpoznaje problemu, ale rozpoznaje, że pakiet jest już zainstalowany i nie zastępuje go.

Publikuję tę odpowiedź, ponieważ zdarza się to tak rzadko, że w końcu szukam w Google i docieram do tej strony, zanim przypomnę sobie, co zrobiłem ostatnio.

longestwayround
źródło
16

Usunięcie poniższych wierszy z web.configrozwiązało mój problem. Zauważ, że w tym projekcie nie korzystałem z komponentów WebApi. Dlatego dla innych to rozwiązanie może nie działać zgodnie z oczekiwaniami.

  <dependentAssembly>
    <assemblyIdentity name="System.Net.Http.Formatting" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
  </dependentAssembly>
Mahmoud Moravej
źródło
skąd wiesz, jaki jest token publiczny wersji?
eran otzap
Jak wiem, jest to publiczny token wszystkich bibliotek dll firmy Microsoft, niezależnie od ich wersji.
Mahmoud Moravej
Żeby było zabawnie dodałem te wersety i to pomogło.
Krzysztof Madej
To też rozwiązało problem.
Vishal
To również rozwiązało mój problem. Przekonwertowałem stary projekt witryny sieci Web na aplikację internetową. Plik Web.config odwoływał się do wersji 5.2.7, podczas gdy zainstalowany pakiet NuGet to 5.2.3. Usunięcie tego z Web.config naprawiło błąd.
Cesar Daniel
9

Dla tych, którzy używają projektu .NET Standard w połączeniu z .NET Framework projektami :

W przypadku platformy .NET Standard pakiety zawarte w projekcie .NET Standard będą poprawnie używane w innych projektach .NET Core i .NET Standard.

Im sposobem .NET Framework, jeśli odwołujesz się do projektu .NET Standard z projektu .NET Framework (MVC), musisz ręcznie pobrać i zainstalować te same pakiety NuGet.

Tak więc odpowiedź na moje pytanie brzmiała, że ​​muszę pobrać i zainstalować Microsoft.AspNet.WebApi.Clientw projekcie sieciowym (.NET Framework), który korzysta z projektu .NET Standard, gdzieMicrosoft.AspNet.WebApi.Client jest to potrzebne. W rzeczywistości miałem już to zainstalowane, ale była różnica w wersji.

Po prostu dodaję tę odpowiedź, aby inni mogli ją zobaczyć, może nie odpowiadać bezpośrednio na pytanie OP, ale zaoszczędziła mi to czas, najpierw sprawdzając to, zamiast wykonywać odpowiedzi, które uzyskały najwięcej głosów.

CularBytes
źródło
1
Używam platformy .NET Core i znalazłem przewodnik dotyczący mockowania HttpClient na stronie gingter.org/2018/07/26/… . Postępowanie zgodnie z tym przewodnikiem dało mi problem opisany w pytaniu OP. I rozwiązałeś problem :)
Thorkil Værge
To właśnie zadziałało dla mnie. Wypróbowałem zalecane podejście, usuwając i przywracając wszystkie pakiety, ale ostatecznie musiałem użyć Nugeta do zainstalowania Microsoft.AspNet.WebApi.Client, upewniając się, że jest to wersja, której potrzebowałem i wszystko było dobrze po tym,
TH Todorov
Świetna odpowiedź - zacząłem myśleć, że muszę przenieść wszystko z powrotem do Framework!
d219
6
  1. Usuń wszystkie odwołania do kodu do System.Net.*
  2. Odinstaluj: pakiet Microsoft.AspNet.WebApii jego zależności.
  3. Zainstaluj ponownie wszystko: pakiet Microsoft.AspNet.WebApii jego zależności.
  4. Wyczyść i odbuduj swój projekt
Sandeep
źródło
Dziękuję Ci! Uratowałeś mnie po 2 dniach desperackich prób. Prawie oszalałem.
Marek Dorda
5

Jak pierwotnie zasugerowano w komentarzu GeoMac i udokumentowano w dokumentacji NuGet, poniższe działały dla mnie, gdy żadna z pozostałych odpowiedzi nie działała:

Narzędzia / Menedżer pakietów NuGet / Konsola Menedżera pakietów

Update-Package -ProjectName MyProjectName -reinstall
bbodenmiller
źródło
Mam Visual Studio 2015. To właśnie musiałem zrobić, natychmiast to naprawiłem.
Damian C
3

W moim przypadku żadne z powyższych rozwiązań nie zadziałało. Rozwiązałem, klikając prawym przyciskiem myszy odniesienie

System.Net.Http.Formatting

z programu Visual Studio i ustawiając właściwość Copy Local na true .

Mam nadzieję, że to jakoś się przyda.

Hugo Nava Kopp
źródło
2
Zrobiłem to i nadal się to dzieje
eran otzap
2

Rozwiązaniem tego irytującego błędu było po prostu zamknięcie programu Visual Studio i ponowne jego otwarcie. Następnie odbuduj rozwiązanie i wszystko znowu zadziałało. Przepraszam za bzdurną odpowiedź, ale myślę, że warto odpowiedzieć, ponieważ rozwiązało to dla mnie.

andreasnico
źródło
1
To było wszystko, czego potrzebowałem
Steve Vermeulen
1

Dla mnie to było tak proste jak

  1. Usunąć Microsoft.AspNet.WebApi.Client z folderu pakietów w Eksploratorze Windows
  2. Otwórz narzędzia> Menedżer pakietów NuGet> Konsola Menedżera pakietów
  3. Kliknij przycisk „Przywróć”
adam0101
źródło
1

W moim przypadku żadne z powyższych nie działało, jednak zastąpienie 5.2.3.0 4.0.0.0 rozwiązało problem.

Sebastián Vansteenkiste
źródło
1

Miałem ten sam problem, ponieważ

System.Net.Http.Formatting

Wersja napisana wewnątrz webconfig to 5.0.3, ale w folderze bin biblioteka System.Net.Http.Formatting dll to 4.0.2

więc właśnie zastąpiłem tym samym podanym pojemnikiem wewnętrznym

wprowadź opis obrazu tutaj

wprowadź opis obrazu tutaj

po prostu zrób ten czysty projekt i skompiluj

TAHA SULTAN TEMURI
źródło
0

Prawdopodobnie musisz ustawić odniesienie do biblioteki jako „Copy Local = True” w oknie właściwości. W programie Visual Studio kliknij „referencje”, a następnie kliknij prawym przyciskiem myszy brakujące odniesienie, we właściwościach menu kontekstowego powinieneś zobaczyć kopiowanie ustawień lokalnych.

kosić
źródło
0

Dla mnie dodanie kilku poniższych wierszy w WebApi.config działa jak po aktualizacji nowego pakietu NuGet nie wyszło

var setting = config.Formatters.JsonFormatter.SerializerSettings;
setting.ContractResolver = new CamelCasePropertyNamesContractResolver();
setting.Formatting = Formatting.Indented;

Nie zapomnij dodać przestrzeni nazw:

using Newtonsoft.Json.Serialization; 
using Newtonsoft.Json;
ashish Vicky
źródło
upewnij się, że sprawdziłeś zależność projektu, klikając prawym przyciskiem myszy plik rozwiązania, a następnie pod wspólnymi właściwościami-> zależności projektu sprawdź projekt, w którym pojawia się błąd lub sprawdź nazwę projektu, od którego zależy rozwiązanie
ashish Vicky
0

To, co zrobiłem, aby rozwiązać ten problem, to

  1. Przejdź do menedżera pakietów NuGet.

  2. Wybierz Aktualizacje (z lewego panelu)

  3. Zaktualizuj komponenty WebApi

  4. Po tym projekt działał bez błędów.

Raj
źródło
0

VS2019: Narzędzia -> Menedżer pakietów Nuget -> Ustawienia Menedżera pakietów -> w sekcji Przywracanie pakietu zaznacz 2 opcje. Następnie przejdź do folderu pakietów projektu i usuń wszystkie foldery podrzędne w środku (bez żadnego błędu). Następnie rozwiązanie Rebuild, Nuget ponownie pobierze wszystkie pakiety, a projekt powinien działać bez żadnego odniesienia.

grandholy
źródło
0

Miałem problem z projektem ASP.NET w VS 2019.

Innym objawem było to, że niektóre odwołania (System.Web.Http) zostały oznaczone jako błędne na liście referencji projektu (Solution Explorer)

Moje rozwiązanie:

  1. Usuń błędne odniesienia w Projekt -> Referencje (prawy przycisk myszy, ...)
  2. Budować
  3. Przejdź do błędów kompilacji „Nie można znaleźć typu lub nazwy przestrzeni nazw [...]” lub podobnych
  4. Użyj opcji „Pokaż potencjalne poprawki” -> Zainstaluj pakiet

Przyczyna:

Patrząc na różnicę w pliku csproj, mogłem zobaczyć przyczynę problemu. Ktoś zdołał odwołać się do biblioteki DLL w folderze plików programu Windows!

<Reference Include="System.Web.Http">
  <HintPath>..\..\..\..\..\..\Program Files (x86)\Microsoft ASP.NET\ASP.NET MVC 4\Packages\Microsoft.AspNet.WebApi.Core.4.0.30506.0\lib\net40\System.Web.Http.dll</HintPath>
</Reference>
<Reference Include="System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
  <SpecificVersion>False</SpecificVersion>
  <HintPath>..\..\..\..\..\..\Program Files (x86)\Microsoft ASP.NET\ASP.NET MVC 4\Packages\Microsoft.AspNet.Mvc.4.0.30506.0\lib\net40\System.Web.Mvc.dll</HintPath>
</Reference>
Daniel Hillebrand
źródło