Nie można załadować pliku lub zestawu „Newtonsoft.Json, wersja = 4.5.0.0, Kultura = neutralny, PublicKeyToken = 30ad4fe6b2a6aeed”


233

Otrzymuję błąd

System.IO.FileLoadException: Nie można załadować pliku lub zestawu „Newtonsoft.Json, Version = 4.5.0.0, Culture = neutralny, PublicKeyToken = 30ad4fe6b2a6aeed” lub jednej z jego zależności. Definicja manifestu zlokalizowanego zespołu nie pasuje do odwołania do zespołu. (Wyjątek od HRESULT: 0x80131040)

dla mojej wersji CI

Rozwiązanie, które próbowałem

<dependentAssembly>
    <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed"
        culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
</dependentAssembly>

To też nie działało


Błąd oznacza, że ​​.NET nie mógł znaleźć biblioteki Json.NET . Czy masz to zainstalowane?
TypeIA

22
Dokładnie ten sam problem - doprowadza mnie do szału. Daj mi znać, jeśli znajdziesz rozwiązanie
Dean Chalk

Właściwie dla mnie dodanie tego, co próbowałeś, rozwiązało problem.
h.alex

Użyj opcji konsolidacji w menedżerze pakietów NuGet, aby upewnić się, że wersje się nie rozpadają.
niico

Jest to jedyna rzecz, która działała dla mnie: github.com/Redth/PushSharp/issues/361#issuecomment-181387928
RichC

Odpowiedzi:


237

W konsoli menedżera pakietów wykonać: Update-Package –reinstall Newtonsoft.Json.

AKTUALIZACJA

Pierwotnie opublikowałem to jako komentarz, ale jak sugerował @OwenBlacker, po prostu umieszczę to tutaj:

Jeśli po wykonaniu tej czynności nadal występuje błąd, to ostatecznie działało dla mnie, że usunąłem <dependentAssembly>sekcję Json.Net z mojego .configpliku. Ponowna instalacja przywraca go, jeśli go nie ma i najwyraźniej musisz go usunąć. Dopóki nie będzie normalnego rozwiązania w samym pakiecie, obawiam się, że ten ręczny krok jest koniecznością.

Uwaga: przed wykonaniem tej czynności przeczytaj poniższe komentarze.

Zgodnie z komentarzem René poniżej UWAŻAJ, że polecenie opublikowane w odpowiedzi spowoduje ponowną instalację pakietu w każdym projekcie w twoim rozwiązaniu. Jeśli więc używasz pakietu Newtonsoft.Json w kilku projektach i być może używasz różnych wersji, wykonanie powyższego polecenia może mieć niepożądane konsekwencje.


7
Ze względu na to, że wszyscy to czytają: zrobiłem to i nadal mam błąd. Potem jakoś to rozwiązałem: O dziwo, musiałem usunąć<dependentAssembly> sekcję Json.Net z mojego .configpliku. Ponowna instalacja przywraca go, jeśli go nie ma i najwyraźniej musisz go usunąć. Dopóki nie będzie normalnego rozwiązania w samym pakiecie, obawiam się, że ten ręczny krok jest koniecznością.
Ofer Zelig

@OferZelig Powinieneś opublikować to jako osobną odpowiedź, aby uzyskać pozytywne opinie (i, co ważniejsze, większą uwagę). Nie tylko dlatego, że mi się to udało :)
Owen Blacker

@OwenBlacker dzięki. Ale ponieważ jest już wiele odpowiedzi, moje zgubią się. Ta odpowiedź jest całkiem dobra, po prostu jeśli nie działa, to mój komentarz ją „uzupełnia”. Wiesz co? Chyba po prostu edytuję oryginalną odpowiedź. Ważniejsze niż zdobycie własnego przedstawiciela.
Ofer Zelig

43
UWAŻAJ, że polecenie opublikowane w odpowiedzi spowoduje ponowną instalację pakietu w każdym projekcie w twoim rozwiązaniu. Jeśli więc używasz pakietu Newtonsoft.Json w kilku projektach i być może używasz różnych wersji, wykonanie powyższego polecenia może mieć niepożądane konsekwencje.
René,

Rozwiązany! Dla mnie zainstalowałem wersję 6 w jednym projekcie, ponowna instalacja z menedżera pakietów doprowadziła ją do wersji 7.
jv-dev

123

Wszystkim, którzy mają problemy z wersją Newtonsoft.Json v4.5, spróbuj użyć tego w web.config lub app.config:

<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
       <dependentAssembly>
           <assemblyIdentity name="Newtonsoft.Json"
               publicKeyToken="30AD4FE6B2A6AEED" culture="neutral"/>
           <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0"/>
       </dependentAssembly>
    </assemblyBinding>
</runtime>

WAŻNE : Sprawdź, czy configurationznacznik pliku konfiguracyjnego nie ma atrybutu przestrzeni nazw (jak sugerowano w https://stackoverflow.com/a/12011221/150370 ). W przeciwnym razie assemblyBindingtagi zostaną zignorowane.


3
dla mnie ręczne usunięcie zawartości folderu bin po czyszczeniu (które go nie opróżnia) rozwiązało problem po zastosowaniu tej odpowiedzi.
Mikaël Mayer

Wielkie dzięki za to! :)
Kamron K.

Działa świetnie! Na dzień 7/4/15 aktualna wersja Newtonsoft.Json to 7.0.0, więc newVersion="6.0.0.0"należy ją zmienić na newVersion="7.0.0.0"dowolną
używaną

3
Ta notatka w przestrzeni nazw ... Mogę cię przytulić. Spieszyłem się godzinami, nie wiedząc, że z tego powodu ignorowane były przekierowania.
Brian

1
Uwaga na temat przestrzeni nazw jest tak ważna, że ​​sama może być odpowiedzią. Dziękuję Ci bardzo.
beawolf

42

Kluczowym punktem jest odwołanie się do właściwej wersji w pliku konfiguracyjnym.

Kroki;

1- Sprawdź, jaka jest wersja pliku Newtonsoft.Json.dll we właściwości odwołania do projektu, niezależnie od wersji w folderze pakietu (na przykład moja to 7.0.1, a wersja odniesienia to 7.0.0.0)

2 - zobacz, czego oczekuje projekt od ciebie w wyjątku (mój to 6.0.0.0)

3- Dodaj zależny zestaw do pliku konfiguracyjnego tak, jak powinien być ..

  <dependentAssembly>
    <assemblyIdentity name="Newtonsoft.Json"  publicKeyToken="30AD4FE6B2A6AEED" culture="neutral"/>
    <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="7.0.0.0"/>
  </dependentAssembly>

Przykro mi, ale mogę dać ci tylko jeden głos (na przykład mój to 7.0.1, a wersja referencyjna to 7.0.0.0) - to ogromna różnica.
Dałbym

To zadziałało dla mnie. Zaktualizowałem wersję do 7, ale naprawdę działała wersja 8, więc właśnie zmieniłem nową wersję na 8.0, dzięki!
Keith,

Mimo że instalowanie 8.0.3 (jak to mówi w menedżerze pakietów nuget), .dll w odnośnikach to wciąż 8.0.0. Więc zmieniłem na 8.0.0.0 w moim pliku web.config. Dziwne, jak to działało wczoraj, kiedy wszystko opublikowałem, a dziś rano już nie działa.
CularBytes

24

Nie miałem szczęścia z żadnym z przedstawionych tutaj rozwiązań (odinstalowywanie, ponowne instalowanie, usuwanie referencji, tworzenie bindRedirects itp.) Musiałem wrócić do starej wersji Newtonsoft. Wersja 5.0.6 działała wcześniej, więc wypróbowałem tę wersję. Musiałem wprowadzić te dwa polecenia w Konsoli pakietów:

uninstall-package newtonsoft.json -force

install-package newtonsoft.json -version "5.0.6"

-forceOpcja w pierwszym poleceniu jest wymagane aby wymusić odinstalowanie. Zależności od innych zestawów uniemożliwiają odinstalowanie bez niego.


Działa jak urok. Wystąpił błąd w moim projekcie MVC 4. Prawie przeszedł na natywny serializator.
Kees C. Bakker

dzięki, właśnie potrzebowałem zmienić -wersję „5.0.6” na -pre: pakiet instalacyjny newtonsoft.json -pre
thiago.adriano26

22

Rozwiązałem problem z dodawaniem tego przekierowania do mojego pliku .config:

<runtime>
    . . . 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <dependentAssembly>
            <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed"
                culture="neutral" />
            <bindingRedirect oldVersion="4.5.0.0" newVersion="6.0.0.0" />
        </dependentAssembly>
    </assemblyBinding>
</runtime>

Komunikat o błędzie informuje, że nie można znaleźć wersji 4.5.0.0, aktualna wersja Newtonsoft.Json to 6.0.0.0, więc przekierowanie powinno przejść z 4.5 do 6.0, a nie odwrotnie


Tak, to rozwiązało mój problem. Tak dziwna ilość problemów, które powoduje JSON.NET .. ale kiedy to się stanie, jest to wymarzona maszyna. Dzięki +1
Piotr Kula,

Twój fragment kodu uświadomił mi, że brakuje elementu „assemblyBinding”. Dzięki
Ryga

21

Myślę, że wskazujesz niewłaściwy cel, zmień go na 4.5 zamiast 6.0

<dependentAssembly>
    <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed"
        culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="4.5.0.0" />
</dependentAssembly>

To powinno działać.


1
Umbraco 7 wymagało wersji 4.5.0.0, więc pomogło to uruchomić i uruchomić
MagicalArmchair

19

Spędziłem kilka dni, próbując rozwiązać ten frustrujący problem. Próbowałem prawie wszystkiego, co można znaleźć w Internecie. Wreszcie odkryłem, że ten błąd może być spowodowany (podobnie jak w moim przypadku) przez różne docelowe wersje projektu .Net (4.5 i 4.5.1) w jednym rozwiązaniu. Poniższe kroki naprawiły to dla mnie:

  1. Dokładnie sprawdź wersję .Net każdego projektu, który znajduje się w twoim rozwiązaniu. Kliknij projekt prawym przyciskiem myszy i przejdź do Properties.

wprowadź opis zdjęcia tutaj

  1. Jeśli to możliwe, ustaw tę samą wersję .Net dla wszystkich projektów. Jeśli nie, przynajmniej spróbuj zmienić projekt startowy (dla mnie to on spowodował problemy).

  2. Usuń wszystkie Newtonsoft.Jsonpaczki z roztworu.

    uninstall-package newtonsoft.json -force

  3. Zaktualizuj wszystkie Newtonsoft.Jsonwersje we wszystkich packages.configplikach, tak jak to

    <package id="Newtonsoft.Json" version="7.0.1" targetFramework="net451" />

  4. Zainstaluj ponownie Newtonsoft.Jsonz „Konsoli menedżera pakietów” za pomocą:

    install-package newtonsoft.json

  5. Odbuduj rozwiązanie

(Opcjonalnie) 7. Jeśli zmieniłeś projekt startowy, zwróć go ponownie


12
uninstall-package newtonsoft.json -force
install-package newtonsoft.json

Zrobił dla mnie lewę :)


1
to też załatwiło sprawę dla mnie. automatycznie zaktualizował plik webconfig do poprawnej wersji.
Shaakir,

Ja też to naprawdę pomogło.
Mike Malter

11

jeśli używasz wielu projektów w tym samym rozwiązaniu i bibliotece jednego innego czeku, czy wszystkie projekty mają tę samą wersję Newtonsoft.Json


To był mój problem. Bardzo frustrujące jest przejście przez wszystkie powyższe odpowiedzi i nieosiągnięcie żadnych rezultatów. W końcu zorientowałem się, kiedy próbowałem sprawdzić wersję .dll w moim folderze kompilacji.

10

Usuń zespół Newtonsoft.Json z odwołania do projektu i dodaj go ponownie. Prawdopodobnie przypadkowo usunąłeś lub zastąpiłeś bibliotekę DLL.


Podejście to działa przeciwko projektowi Xamarin Forms iOS, w którym upuściłem pakiet NuGet i ponownie go dodałem. Dzięki.
Senator

9

Pisałem klienta usługi WebEST REST, więc dla mnie ten błąd był spowodowany ręcznym dodawaniem odwołań do System.Net.Httpi System.Net.Http.Formattingzestawów za pomocą Add Reference, kiedy powinienem był dodać Microsoft.AspNet.WebApi.Clientpakiet za pośrednictwem NuGet . Zobacz także tę odpowiedź na inne pytanie .


8

W swoim rozwiązaniu masz 2 różne wersje biblioteki JSON.NET. Aby rozwiązać ten problem, należy zaktualizować je do najnowszej wersji. Wykonaj następujące kroki:

1-Otwórz rozwiązanie eksploratora 2-Kliknij prawym przyciskiem myszy nazwę rozwiązania 3-Wybierz Zarządzaj pakietami Nuget dla rozwiązania 4-Wybierz Aktualizacje z menu 5-Aktualizuj pakiet JSON.NET

To rozwiąże problem.

link: Nie można załadować pliku lub zestawu „Newtonsoft.Json, Wersja = 7.0.0.0, Kultura = neutralny, PublicKeyToken = 30ad4fe6b2a6aeed” lub jednej z jego zależności


Najłatwiejszy i najbezpieczniejszy sposób rozwiązania tego problemu. Dzięki @mohammad
deanwilliammills

7

Wdróż poprawną wersję na komputerze CI

Oznacza to, że moduł ładujący zestaw znalazł inną wersję Newtonsoft.Jsonzestawu, która nie jest zgodna z odniesieniem utworzonym w projekcie. Aby poprawnie załadować zestaw, należy albo wdrożyć zestaw razem ze skompilowanym kodem, albo zainstalować poprawną wersję zestawu na maszynie docelowej (tj. W GAC).

Alternatywnie: upewnij się, że konfiguracja zawiera poprawny plik

Jeśli chcesz zachować bieżące rozwiązanie i załadować zestaw z inną wersją, upewnij się, że opublikowana konfiguracja znajduje się we właściwym .configpliku. Pamiętaj, że nie xpto.dll.config, biblioteka DLL ładowana przez aplikację zawsze korzysta z pliku konfiguracyjnego uruchomionej aplikacji.


6

Zwykle dodanie przekierowania wiązania powinno rozwiązać ten problem, ale nie działało to dla mnie. Po kilku godzinach walenia głową w ścianę zdałem sobie sprawę, że w moim pliku web.config występuje atrybut xmlns. Po usunięciu atrybutu xmlns z węzła konfiguracji w pliku Web.config przekierowania wiązania działały zgodnie z oczekiwaniami.

http://www.davepaquette.com/archive/2014/10/02/could-not-load-file-or-assembly-newtonsoft-json-version4-5-0-0.aspx


5
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
  <dependentAssembly>
    <assemblyIdentity name="Newtonsoft.Json"
        publicKeyToken="30AD4FE6B2A6AEED" culture="neutral"/>
    <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="7.0.0.0"/>
  </dependentAssembly>
</assemblyBinding>

Działa dla mnie .... po prostu umieść wersję, której używasz w newVersion, tj. (NewVersion = "7.0.0.0")


Miałem ten problem kilka razy temu i naprawiłem go za jednym razem. Dziękuję Ci bardzo.
GutierrezDev

5

Zamknij rozwiązanie.

Otwórz packages.configi za *.csprojpomocą edytora tekstu i usuń dowolny wiersz mają Newtonsoft.Json

Dawny:
<Reference Include="Newtonsoft.Json,Version=9.0.0.0,Culture=neutral,PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL"> <HintPath>..\packages\Newtonsoft.Json.9.0.1\lib\net40\Newtonsoft.Json.dll</HintPath> <Private>True</Private> </Reference>

Lub <package id="Newtonsoft.Json" version="9.0.1" targetFramework="net40" />

Ponownie otwórz rozwiązanie i ponownie zainstaluj Newtonsoft.Json przez Install-Package Newtonsoft.Json

To działa dla mnie.


to działa kiedyś, ale w nadchodzących wersjach ten problem pojawił się ponownie
Heemanshu Bhalla

Nie ma problemu, jeśli nie zaktualizujesz go haha. Utwórz projekt kosza i zainstaluj plik Newtonsoft.Json.dll, skopiuj go (plik DLL) i dodaj do odwołania do projektu.
Trương Quốc Khánh

4

Mieliśmy dokładnie ten sam problem, o którym wspomniałeś. Używamy nunit do uruchamiania testów przez CI, i nunit uruchamia plik o nazwie tests.nunit, który opisuje listę testowych urządzeń dll do uruchomienia.

Każde urządzenie testowe miało swój własny plik konfiguracyjny, ale po uruchomieniu przez plik „tests.nunit” przekierowania wiązania wydają się być ignorowane. Rozwiązaniem było dodanie przekierowań powiązań do nowego pliku konfiguracyjnego „tests.config”, który znajdował się obok pliku „tests.nunit”.


czy możesz rozwinąć?
KirstieBallance

4

Mam ten sam typ problemu. Rozwiązałem to również, wykonując następujące czynności: Przejdź do NARZĘDZIA > Menedżer pakietów NuGet i wybierz Konsolę Menedżera pakietów . Na koniec wykonaj następujące dwa polecenia :)

  1. odinstaluj pakiet newtonsoft.json -force
  2. pakiet instalacyjny newtonsoft.json

4

Należy zaktualizować plik web.config na serwerze. Podczas instalacji Nuget zaktualizuj ten plik, włączając ten kod

<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
  <dependentAssembly>
    <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
  </dependentAssembly>
</assemblyBinding>


W moim przypadku było to dokładnie moje rozwiązanie, umieść w app.config. „Wersje zestawu można przekierowywać w aplikacjach, zasadach wydawcy lub plikach konfiguracyjnych komputera”.
datps


3

Popełniłem błąd, dodając plik .dll NewtonSoft dla .Net 4.5.

Mój główny projekt to 4.5, ale kiedy dodałem dodatkowy projekt do mojego rozwiązania, dziwnie dodałem go jako projekt .Net 2.0 ... i kiedy próbowałem z tym korzystać z biblioteki DLL 4.5 NewtonSoft, otrzymałem ten plik „Newtonsoft.Json” błąd „nie znaleziono”.

Rozwiązaniem (oczywiście) była zmiana tego nowego projektu z .Net 2.0 na 4.5.


3

W moim przypadku główny projekt wciąż odwoływał się do starej wersji Newtonsoft.Json, która już nie istniała w projekcie (oznaczona żółtym wykrzyknikiem). Usunięcie odwołania rozwiązało problem, nie było konieczne wiązanie przekierowania.


3

Miałem dokładnie ten sam problem z wersją 7.0.0.0, a biblioteką powodującą mój problem była Microsoft.Rest.ClientRuntime, która w jakiś sposób odnosiła się do niewłaściwej wersji (6.0.0.0) Newtonsoft.json, pomimo prawidłowego zarządzania zależnościami w modelu użytkowym ( zainstalowano właściwą wersję newtonsoft.json (7.0.0.0).

Rozwiązałem to, stosując powyższe przekierowanie z wersji 6.0.0.0 do 7.0.0.0 (z Kadir Can) w pliku konfiguracyjnym:

<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="7.0.0.0" />

----> Po kilku dniach bez zmiany niczego pojawiło się to z tym samym błędem. Zainstalowałem wersję 6.0.0.0 n zaktualizowałem ją do wersji 7.0.0.0, teraz działa dobrze.


Pracował dla mnie. Zainstalowana wersja Newtonsoft Json 7.0.1 (beta), ale wygenerowana konfiguracja wskazywała na 6.0.0.0, co było niepoprawne. Dzięki!
Dhanuka777,

2

W moim przypadku po pobraniu zestawu i dodaniu odwołania do projektu rozwiązałem to poprzez „odblokowanie” biblioteki DLL przed dodaniem odwołania do projektu.

Za pomocą Eksploratora Windows przejdź do lokalizacji DLL, kliknij prawym przyciskiem myszy DLL, a następnie wybierz „właściwości”. Na jednej z kart znajdziesz przycisk „odblokuj”, a następnie możesz dodać odniesienie, a zestaw załaduje się poprawnie.



2

Kliknij projekt prawym przyciskiem myszy, wybierz zarządzanie pakietami Nuget, wpisz newtonsoft w polu wyszukiwania i zainstaluj najnowszą wersję. Następnie uruchom aplikację


2

Napotkałem ten sam błąd i zmagałem się z nim przez wiele godzin. Miałem projekt interfejsu API sieci Web korzystający z Newtonsoft.json i inny projekt UnitTest dla projektu interfejsu API sieci Web. Projekt testu jednostkowego wymagał również odwołania Newtonsoft.json. Ale po dodaniu linku otrzymałem powyższy wyjątek.

W końcu rozwiązałem ten problem, dodając poniższy fragment kodu w app.config projektu testu jednostkowego:

<dependentAssembly>
    <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30AD4FE6B2A6AEED" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
</dependentAssembly>

<dependentAssembly> <assemblyIdentity name = "Newtonsoft.Json" publicKeyToken = "30AD4FE6B2A6AEED" culture = "neutralny" /> <bindingRedirect oldVersion = "0.0.0.0-6.0.0.0" newVersion = "6.0.0.0" /> </dependentAssembly>
mukulsharma1146

Miałem ten sam problem, kiedy uaktualniłem Nestwonsoft.Json, wciąż korzystając ze starej wersji WebAPI, i to rozwiązało. Dzięki!
Gavin.Paolucci.Kleinow

2

Innym podstępnym problemem jest to, że wydaje się, że przekierowania wiązania mogą po prostu dyskretnie zakończyć się niepowodzeniem, jeśli element ma niepoprawną konfigurację na jakichkolwiek innych zależnych elementach zestawu.

Upewnij się, że pod każdym elementem znajduje się tylko jeden element.

W niektórych przypadkach VS generuje to:

  <dependentAssembly>
    <assemblyIdentity ...
    <assemblyIdentity ...
  </dependentAssembly>

Zamiast

  <dependentAssembly>
    <assemblyIdentity ...
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity ...
  </dependentAssembly>

Długo zajęło mi uświadomienie sobie, że to był problem!


2

Poniżej sekcji dodaj do pliku web.config

<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
       <dependentAssembly>
           <assemblyIdentity name="Newtonsoft.Json"
               publicKeyToken="30AD4FE6B2A6AEED" culture="neutral"/>
           <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0"/>
       </dependentAssembly>
    </assemblyBinding>
</runtime>

2

Jeśli błąd znika lokalnie i nadal pojawia się na serwerze, rozwiązaniem, które ze mną współpracuje, jest usunięcie folderu bin i pakietów .config i web.config i ponowne załadowanie tych plików

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.