2012-02-24 11 views
8

“Impossibile caricare il file o l'assembly 'Newtonsoft.Json, Version = 4.0.3.0, Lingua = il neutro PublicKeyToken = 30ad4fe6b2a6aeed' o una delle sue dipendenze . La definizione manifest dell'assembly individuato non corrisponde a e corrisponde al riferimento all'assembly. (Eccezione da HRESULT: 0x80131040) ".Impossibile caricare il file o il montaggio Newtonsoft.json.dll

L'assembly 'NewtonsoftJson.dll' è necessario per la pubblicazione su Twitter. La versione utilizzata è 4.0.3.0.

E lo stesso assembly (ma diff versione 4.0.0.0) viene utilizzato come assembly dipendente da Facebook C# api (dll). Tuttavia il suddetto assembly (4.0.3.0) non funziona per entrambi i casi (ad esempio per la pubblicazione su Twitter e per l'accesso a Facebook). Per risolverlo, creato un progetto separato per la pubblicazione su Twitter e fare riferimento all'assembly (4.0.3.0) separatamente (nel progetto per il post di Twitter). E un'altra versione (4.0.0.0) è stata aggiunta come riferimento nel progetto principale per Facebook ma ancora l'errore viene. Se il progetto di twitter è disabilitato ed eseguito allora l'accesso di Facebook funziona bene e vice vera.

Ho svolto molte ricerche e ho provato quanto segue.

eliminare i file temporanei asp.net soluzione pulita riavvio del computer

anche provato a disinstallare l'assembly dalla GAC ​​(tuttavia la sua non registrato lì).

Per favore aiutatemi perché non funziona. Grazie, S

risposta

8

Non è chiaro quali sono le relazioni dei progetti o quando si verifica questo errore, ma ecco un'ipotesi.

Hai 3 progetti per il progetto facebook (versione 4.0.0.0 ref), progetto twitter (versione 4.0.3.0 refs) e un progetto principale che configura entrambi i progetti. Potresti essere in grado di creare questa soluzione, ma quando esegui l'associazione il binario fallirà. Perché? perché il comportamento predefinito è copiare gli assembly localmente prima di eseguirli. Quello che succede è che il primo progetto per costruire copie su bin (dite twitter) poi il secondo progetto costruisce (facebook), quindi main. Tuttavia, alla fine di questo la versione 4.0.0.0 è una cartella bin seduta. Quando si esegue, non appena si richiama qualcosa da Twitter che tenta di utilizzare l'assembly del problema, il bind fallisce perché ha più accesso alla versione 4.0.3.0 dell'assembly.

Ci sono un paio di modi per aggirare questo. Uno è registrare entrambi gli assembly nel GAC. Se ciò non è fattibile, esaminare assembly binding redirection nel file di configurazione. Un altro è quello di registrarsi per il AssemblyResolve event e caricare l'assembly a livello di codice.

+0

prega di dare un'occhiata su http://stackoverflow.com/questions/22490967/visual-studio-keeps-overwriting-newtonsoft-json-dll-with-an-older-version builing un progetto, i cambiamenti Versione di newtonsoft.json.dll nell'altro! – nsb

8

Aggiungere il seguente al file 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-4.5.0.0" newVersion="4.5.0.0" /> 
     </dependentAssembly> 
    </assemblyBinding> 
    </runtime> 

i tuoi <configuration></configuration> tag

0

installare il pacchetto Newtonsoft in tutti i progetti.

Install-Package Newtonsoft.Json -Version 8.0.3 
Problemi correlati