Impossibile caricare il file o l'assembly "Newtonsoft.Json, Version = 4.5.0.0, Culture = neutral, PublicKeyToken = 30ad4fe6b2a6aeed"


233

Ricevo l'errore

System.IO.FileLoadException: impossibile caricare il file o l'assembly 'Newtonsoft.Json, Version = 4.5.0.0, Culture = neutral, PublicKeyToken = 30ad4fe6b2a6aeed' o una delle sue dipendenze. La definizione manifest dell'assembly individuato non corrisponde al riferimento dell'assembly. (Eccezione da HRESULT: 0x80131040)

per la mia build CI

Soluzione che ho provato

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

Inoltre non ha funzionato


L'errore indica che .NET non è riuscito a trovare la libreria Json.NET . L'hai installato?
TypeIA

22
Esatto stesso problema: mi fa impazzire. Fammi sapere se trovi una soluzione
Dean Chalk,

In realtà, per me l'aggiunta di ciò che hai provato ha risolto il problema.
h.alex,

Utilizzare l'opzione di consolidamento nel gestore pacchetti NuGet per assicurarsi che le versioni non si discostino.
Niico,

Questa è l'unica cosa che ha funzionato per me: github.com/Redth/PushSharp/issues/361#issuecomment-181387928
RichC

Risposte:


237

Nella console gestore di pacchetti eseguire: Update-Package –reinstall Newtonsoft.Json.

AGGIORNARE

Inizialmente l'ho pubblicato come commento ma, come suggerito da @OwenBlacker, lo inserirò qui:

Se dopo aver fatto questo hai ancora un errore, alla fine quello che ha funzionato per me è che ho eliminato la <dependentAssembly>sezione di Json.Net dal mio .configfile. Reinstall lo riporta se non è presente e apparentemente è necessario eliminarlo. Fino a quando non ci sarà una soluzione normale nel pacchetto stesso, temo che questo passaggio manuale sia un must.

Nota: leggere i commenti seguenti prima di procedere.

In base al commento di René di seguito, ATTENTI che il comando pubblicato nella risposta reinstallerà il pacchetto in ogni progetto della tua soluzione. Quindi, se si utilizza il pacchetto Newtonsoft.Json in diversi progetti e si utilizzano forse versioni diverse, l'esecuzione del comando sopra potrebbe avere conseguenze indesiderate.


7
Per il bene di chiunque legga questo: l'ho fatto e ho ancora ricevuto l'errore. Poi l'ho risolto in qualche modo: sorprendentemente, ho dovuto eliminare la <dependentAssembly>sezione di Json.Net dal mio .configfile. Reinstall lo riporta se non è presente e apparentemente è necessario eliminarlo. Fino a quando non ci sarà una soluzione normale nel pacchetto stesso, temo che questo passaggio manuale sia un must.
Ofer Zelig,

@OferZelig Dovresti pubblicarlo come una risposta separata, in modo che possa ottenere i voti (e, soprattutto, una maggiore attenzione). Non da ultimo perché ha funzionato anche per me :)
Owen Blacker,

@OwenBlacker grazie. Ma poiché ci sono già molte risposte, la mia si perderà. E questa risposta è abbastanza buona, è solo che se non funziona il mio commento lo "completa". Sai cosa? Immagino che modificherò solo la risposta originale. Più importante che ottenere il proprio rappresentante.
Ofer Zelig,

43
ATTENZIONE : il comando pubblicato nella risposta reinstallerà il pacchetto in ogni progetto nella soluzione. Quindi, se si utilizza il pacchetto Newtonsoft.Json in diversi progetti e si utilizzano forse versioni diverse, l'esecuzione del comando sopra potrebbe avere conseguenze indesiderate.
René,

Risolto! Per me, avevo installato la v6 in un progetto, la reinstallazione da Gestione pacchetti lo ha portato alla v7.
jv-dev,

123

Per tutti coloro che hanno problemi con la versione di Newtonsoft.Json v4.5 provare a utilizzare questo in web.config o 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>

IMPORTANTE : verificare che il configurationtag del file di configurazione non abbia alcun attributo dello spazio dei nomi (come suggerito in https://stackoverflow.com/a/12011221/150370 ). Altrimenti, i assemblyBindingtag verranno ignorati.


3
per me, eliminare manualmente il contenuto della cartella bin dopo la pulizia (che non lo svuota) ha fatto il trucco dopo aver applicato questa risposta.
Mikaël Mayer,

Grazie mille per questo! :)
Kamron K.

Funziona alla grande! A partire dal 04/07/15 la versione corrente di Newtonsoft.Json è 7.0.0, quindi newVersion="6.0.0.0"deve essere cambiata in newVersion="7.0.0.0"qualsiasi versione che stai usando
Moses Machua

3
Quella nota sullo spazio dei nomi ... Potrei abbracciarti. Ho bruciato ore su questo senza sapere che i reindirizzamenti vincolanti venivano ignorati a causa di ciò.
Brian,

1
La nota sullo spazio dei nomi è così importante che potrebbe essere una risposta a sé stante. Grazie mille.
beawolf,

42

Il punto chiave è fare riferimento alla versione corretta nel file di configurazione.

passi;

1- guarda qual è la versione di Newtonsoft.Json.dll nella proprietà di riferimento del progetto qualunque sia la versione nella cartella del pacchetto (ad esempio la mia è 7.0.1 e la versione di riferimento è 7.0.0.0)

2- guarda cosa si aspetta il progetto da te nell'eccezione (il mio è 6.0.0.0)

3- Aggiungi assembly dipendente al tuo file di configurazione come dovrebbe essere ..

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

Ci dispiace, posso dare un solo voto al tuo punto (ad esempio il mio è 7.0.1 e la versione di riferimento è 7.0.0.0) ha fatto una grande differenza. Avrei dato di più ..... Grazie :)
Zaker

Questo ha funzionato per me. Ho aggiornato la versione a 7, ma era davvero in esecuzione la versione 8, quindi ho appena cambiato la nuova versione in 8.0, grazie!
Keith

Anche se l'installazione 8.0.3 (come si dice nel gestore dei pacchetti nuget), la DLL sotto i riferimenti è ancora 8.0.0. Quindi sono passato a 8.0.0.0 nel mio web.config. Strano come ha funzionato ieri quando ho pubblicato tutto e stamattina non funziona più.
CularBytes,

24

Non ho avuto fortuna con nessuna delle soluzioni presentate qui (disinstallazione, reinstallazione, eliminazione di riferimenti, creazione di binding Redirect ecc.) Ho dovuto tornare a una vecchia versione di Newtonsoft. La versione 5.0.6 aveva funzionato prima, quindi l'ho provato. Ho dovuto inserire questi due comandi nella Console pacchetti:

uninstall-package newtonsoft.json -force

install-package newtonsoft.json -version "5.0.6"

L' -forceopzione nel primo comando è necessaria per forzare la disinstallazione. Le dipendenze con altri assembly impediscono la disinstallazione senza di essa.


Ha funzionato come un fascino. Ho avuto l'errore nel mio progetto MVC 4. Quasi passato al serializzatore nativo.
Kees C. Bakker,

grazie, avevo solo bisogno di cambiare -version "5.0.6" in -pre: install-package newtonsoft.json
-pre

22

Ho risolto il problema aggiungendo questo reindirizzamento di associazione al mio file .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>

Il messaggio di errore si lamenta di non trovare la versione 4.5.0.0, la versione corrente di Newtonsoft.Json è 6.0.0.0, quindi il reindirizzamento dovrebbe andare dalla 4.5 alla 6.0, non viceversa


Sì, questo ha risolto il mio problema. Così strana la quantità di problemi che JSON.NET causa .. ma una volta che va è una macchina da sogno. Grazie +1
Piotr Kula,

Il tuo frammento di codice mi ha fatto capire che mancava l'elemento 'assemblyBinding'. Grazie
Riga,

21

Penso che stai puntando al bersaglio sbagliato, cambiarlo in 4.5 anziché 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>

Questo dovrebbe funzionare.


1
Umbraco 7 richiede 4.5.0.0, quindi questo ha contribuito a metterlo in funzione
MagicalArmchair

19

Ho trascorso un paio di giorni cercando di risolvere questo problema frustrante. Ho provato praticamente tutto ciò che può essere trovato sul web. Alla fine ho scoperto che questo errore potrebbe essere causato (come nel mio caso) dalle diverse versioni del progetto .Net di destinazione (4.5 e 4.5.1) in una soluzione. I seguenti passaggi mi hanno risolto:

  1. Controlla la versione .Net di ogni progetto presente nella tua soluzione. Basta fare clic destro sul progetto e andare a Properties.

inserisci qui la descrizione dell'immagine

  1. Se possibile, impostare la stessa versione .Net per tutti i progetti. Se non altro, prova a cambiare quello del progetto Startup (per me questo è stato quello che ha causato i problemi).

  2. Rimuovere tutti i Newtonsoft.Jsonpacchetti dalla soluzione.

    uninstall-package newtonsoft.json -force

  3. Aggiorna tutte le Newtonsoft.Jsonversioni in tutti i packages.configfile, in questo modo

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

  4. Reinstallare Newtonsoft.Jsonda "Package Manager Console" con:

    install-package newtonsoft.json

  5. Ricostruisci la soluzione

(Facoltativo) 7. Se il progetto di avvio è stato modificato, restituirlo di nuovo


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

Ha fatto il trucco per me :)


1
questo ha funzionato anche per me. ha aggiornato automaticamente il file webconfig alla versione corretta.
Shaakir,

Anche a me è stato di grande aiuto.
Mike Malter,

11

se si utilizzano più progetti nella stessa soluzione e la libreria dell'altro controllo, tutti i progetti hanno la stessa versione di Newtonsoft.Json


Questo era il mio problema. Molto frustrante passare attraverso tutte le risposte sopra e non ottenere risultati. Alla fine l'ho capito quando mi sono preso la briga di controllare la versione del .dll nella mia cartella Build.

10

Rimuovere l'assembly Newtonsoft.Json dal riferimento del progetto e aggiungerlo di nuovo. Probabilmente hai cancellato o sostituito la DLL per caso.


Questo approccio funziona contro un progetto iOS di Xamarin Forms in cui ho lasciato cadere il pacchetto NuGet e l'ho aggiunto di nuovo. Grazie.
Il senatore il

9

Stavo scrivendo un client del servizio REST WebApi, quindi per me questo errore è stato causato dall'aggiunta manuale di riferimenti agli assembly System.Net.Httpe agli System.Net.Http.Formattingassemblaggi tramite Aggiungi riferimento, quando avrei dovuto aggiungere il Microsoft.AspNet.WebApi.Clientpacchetto tramite NuGet . Vedi anche questa risposta a un'altra domanda .


8

Hai 2 diverse versioni della libreria JSON.NET nella tua soluzione. Per risolvere questo problema, è necessario aggiornarli all'ultima versione. Segui questi passi:

1-Open solution explorer 2-Click destro sul nome della soluzione 3-Seleziona Gestisci pacchetti Nuget per soluzione 4-Seleziona aggiornamenti dal menu 5-Aggiorna pacchetto JSON.NET

Questo risolverà il tuo problema.

collegamento: impossibile caricare il file o l'assembly "Newtonsoft.Json, Versione = 7.0.0.0, Cultura = neutro, PublicKeyToken = 30ad4fe6b2a6aeed" o una delle sue dipendenze


Il modo più semplice e sicuro per risolvere questo problema. Grazie @mohammad
deanwilliammills il

7

Distribuire la versione corretta sul computer CI

Ciò indica che il caricatore di assembly ha trovato una versione diversa Newtonsoft.Jsondell'assembly, che non corrisponde al riferimento creato nel progetto. Per caricare correttamente il gruppo, è necessario distribuire il gruppo fianco a fianco con il codice compilato oppure installare la versione corretta del gruppo nella macchina di destinazione (ovvero nel GAC).

Alternativa: assicurarsi che la configurazione sia nel file corretto

Se si desidera mantenere la soluzione corrente e caricare un assembly con una versione diversa, assicurarsi che la configurazione pubblicata sia nel .configfile corretto . Ricordare che non esiste xpto.dll.config, una DLL caricata da un'applicazione utilizza sempre il file di configurazione dell'applicazione in esecuzione.


6

Normalmente l'aggiunta del reindirizzamento vincolante dovrebbe risolvere questo problema, ma non ha funzionato per me. Dopo alcune ore di sbattere la testa contro il muro, mi sono reso conto che c'era un attributo xmlns che causava problemi nel mio web.config. Dopo aver rimosso l'attributo xmlns dal nodo di configurazione in Web.config, i reindirizzamenti dell'associazione hanno funzionato come previsto.

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>

Funziona per me .... basta inserire la versione che si sta utilizzando in newVersion cioè (newVersion = "7.0.0.0")


Ho avuto questo problema alcune volte fa e questo è stato risolto in un colpo solo. Grazie mille.
GutierrezDev

5

Chiudi soluzione.

Apri packages.confige *.csprojcon l'editor di testo ed elimina qualsiasi riga ha Newtonsoft.Json

Ex:
<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>

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

Aprire di nuovo la soluzione e reinstallare Newtonsoft.Json di Install-Package Newtonsoft.Json

Funziona per me.


funziona qualche volta ma nelle build imminenti questo problema è tornato di nuovo n
Heemanshu Bhalla

Nessun problema se non lo aggiorni ahah. Crea progetto cestino e installa Newtonsoft.Json.dll, copialo (file dll) e aggiungilo al riferimento del tuo progetto.
Trương Quốc Khánh,

4

Abbiamo avuto lo stesso identico problema che hai menzionato. Stiamo utilizzando nunit per eseguire test tramite CI e abbiamo nunit in esecuzione un file chiamato tests.nunit, che descrive un elenco di dispositivi di test dll da eseguire.

Ogni dispositivo di test aveva il proprio file di configurazione, ma quando eseguito attraverso il file "tests.nunit" i reindirizzamenti di associazione sembrano essere ignorati. La soluzione era aggiungere i reindirizzamenti di associazione a un nuovo file di configurazione, "tests.config" accanto al file "tests.nunit".


Puoi elaborare?
KirstieBallance

4

Ho lo stesso tipo di problema. E ho anche risolto semplicemente facendo quanto segue: Vai su STRUMENTI > NuGet Package Manager e Seleziona Package Manager Console . Infine, esegui i seguenti due comandi :)

  1. pacchetto di disinstallazione newtonsoft.json -force
  2. pacchetto-installazione newtonsoft.json

4

È necessario aggiornare il file web.config nel server. Quando nuget installa NewtonSoft, aggiorna questo file incluso questo codice

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


Nel mio caso quella era esattamente la mia soluzione, inserisco app.config. "Le versioni dell'assieme possono essere reindirizzate nell'applicazione, nella politica del publisher o nei file di configurazione della macchina."
datps


3

Ho fatto l'errore di aggiungere un file .dll NewtonSoft per .Net 4.5.

Il mio progetto principale era 4.5, ma quando ho aggiunto un progetto extra alla mia soluzione, lo ha stranamente aggiunto come progetto .Net 2.0 ... e quando ho provato a usare la dll 4.5 di NewtonSoft con questo, ho ottenuto questo "Newtonsoft.Json non poteva errore "t be found".

La soluzione (ovviamente) era quella di cambiare questo nuovo progetto da .Net 2.0 a 4.5.


3

Nel mio caso, il progetto principale faceva ancora riferimento a una vecchia versione di Newtonsoft.Json che non esisteva più nel progetto (indicato da un punto esclamativo giallo). La rimozione del riferimento ha risolto il problema, non è stato necessario rilegare Redirect.


3

Ho avuto lo stesso identico problema con la versione 7.0.0.0 e la lib che causava il mio problema era Microsoft.Rest.ClientRuntime che in qualche modo si riferiva alla versione errata (6.0.0.0) di Newtonsoft.json, nonostante la corretta gestione delle dipendenze in nugget ( è stata installata la versione corretta di newtonsoft.json (7.0.0.0)).

Ho risolto questo applicando il reindirizzamento sopra da 6.0.0.0 a 7.0.0.0 (da Kadir Can) nel file di configurazione:

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

----> Dopo alcuni giorni senza cambiare nulla, è emerso di nuovo con lo stesso errore. Ho installato la versione 6.0.0.0 n e l'ho aggiornata alla 7.0.0.0 ora funziona bene.


Ha funzionato per me. Versione installata Newtonsoft Json 7.0.1 (beta), ma la configurazione generata puntava alla 6.0.0.0 che non era corretta. Grazie!
Dhanuka777,

2

Nel mio caso, dopo aver scaricato l'assembly e aggiunto il riferimento al progetto, l'ho risolto "sbloccando" la DLL prima di aggiungere il riferimento al progetto.

Usando Windows Explorer, vai alla posizione della DLL, fai clic con il tasto destro sulla DLL e seleziona 'Proprietà'. Troverai un pulsante "sblocca" su una delle schede, quindi puoi aggiungere il riferimento e il gruppo verrà caricato correttamente.



2

Fai clic con il pulsante destro del mouse sul progetto, seleziona Gestisci pacchetti Nuget, digita newtonsoft nella casella di ricerca e installa la versione più recente. Quindi esegui la tua app


2

Stavo affrontando lo stesso errore e ho lottato con esso per ore. Ho avuto un progetto API Web che utilizza Newtonsoft.json e un altro progetto UnitTest per il progetto API Web. Il progetto di unit test necessitava anche del riferimento Newtonsoft.json. Ma aggiungendo il link stavo ottenendo l'eccezione sopra.

Alla fine l'ho risolto aggiungendo lo snippet di codice seguente nell'app.config del progetto unit test:

<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 = "neutral" /> <bindingRedirect oldVersion = "0.0.0.0-6.0.0.0" newVersion = "6.0.0.0" /> </dependentAssembly>
mukulsharma1146,

Stavo riscontrando lo stesso problema quando ho aggiornato Nestwonsoft.Json mentre ancora utilizzavo la vecchia versione di WebAPI e questo ha risolto il problema. Grazie!
Gavin.Paolucci.Kleinow il

2

Un altro problema insidioso è che sembra che i reindirizzamenti vincolanti possano fallire silenziosamente se l'elemento ha una configurazione errata su qualsiasi altro elemento di AssemblyAssembly.

Assicurati di avere un solo elemento sotto ciascun elemento.

In alcuni casi, VS genera questo:

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

Invece di

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

Mi ci è voluto molto tempo per capire che questo era il problema!


2

Sotto la sezione aggiungi al tuo 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

Se l'errore scompare localmente e appare ancora sul server, la soluzione che funziona con me è eliminare la cartella bin e packages.config e web.config e ricaricare questi file

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.