La definizione manifest dell'assembly individuato non corrisponde al riferimento dell'assembly


751

Sto cercando di eseguire alcuni test unitari in un'applicazione Windows Forms C # (Visual Studio 2005) e ottengo il seguente errore:

System.IO.FileLoadException: impossibile caricare il file o l'assembly 'Utility, Version = 1.2.0.200, Culture = neutral, PublicKeyToken = 764d581291d764f7' o una delle sue dipendenze. La definizione manifest dell'assembly individuato non corrisponde al riferimento dell'assembly. (Eccezione da HRESULT: 0x80131040) **

su x.Foo.FooGO ()

at x.Foo.Foo2 (String groupName_) in Foo.cs: riga 123

at x.Foo.UnitTests.FooTests.TestFoo () in FooTests.cs: linea 98 **

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

Guardo i miei riferimenti e ho solo un riferimento a Utility version 1.2.0.203(l'altro è vecchio).

Qualche suggerimento su come capire cosa sta cercando di fare riferimento a questa vecchia versione di questo file DLL?

Inoltre, non credo di avere questo vecchio assemblaggio sul mio disco rigido. Esiste uno strumento per cercare questo vecchio assembly con versione?


Nel mio caso, questo è successo perché avevo due progetti che caricavano la stessa DLL con versioni diverse. (spero che questo aiuti qualcuno!)
miguelmpn,

Risposte:


461

Caricatore di assembly .NET:

  • non è in grado di trovare 1.2.0.203
  • ma ho trovato un 1.2.0.200

Questo assembly non corrisponde a quanto richiesto e pertanto viene visualizzato questo errore.

In parole semplici, non riesce a trovare l'assembly a cui si fa riferimento. Assicurarsi che riesca a trovare l'assemblaggio corretto inserendolo nel GAC o nel percorso dell'applicazione. Vedi anche https://docs.microsoft.com/archive/blogs/junfeng/the-located-assemblys-manifest-definition-with-name-xxx-dll-does-not-match-the-assembly-reference .


19
ma quando guardo i riferimenti del progetto, punta a 1.2.0.203 ... nulla sembra più puntare all'1.2.0.200
leora,

128
Esatto: sta cercando 1.2.0.203, ma ha trovato 1.2.0.200. Scopri dove si trova quel file e sostituiscilo con la versione giusta.
Jon Skeet,

18
Ho fatto una domanda simile qui e ho ottenuto una soluzione funzionante: stackoverflow.com/questions/4187907/…
Michael La Voie

13
Controlla la versione dei riferimenti, quindi controlla se è la stessa in pacchetti.config e Web.config
zdarsky.peter

4
Questo messaggio mi confonde ogni volta. Sembra essere scritto al contrario. Mi aspetto che si lamenti della versione che hai chiesto di caricare, non della versione trovata. Sono contento di non essere l'unico a sbagliare!
Greg Woods,

91

Puoi fare un paio di cose per risolvere questo problema. Innanzitutto, utilizza la ricerca di file di Windows per cercare il tuo disco rigido per il tuo assembly (.dll). Una volta che hai un elenco di risultati, fai Visualizza-> Scegli Dettagli ... e quindi seleziona "Versione file". Verrà visualizzato il numero di versione nell'elenco dei risultati, in modo da poter vedere da dove potrebbe provenire la versione precedente.

Inoltre, come ha detto Lars, controlla il tuo GAC per vedere quale versione è elencata lì. Questo articolo di Microsoft afferma che gli assembly trovati nel GAC non vengono copiati localmente durante una build, quindi potrebbe essere necessario rimuovere la versione precedente prima di fare una ricostruzione di tutto. (Vedi la mia risposta a questa domanda per le note sulla creazione di un file batch per farlo per te)

Se non riesci ancora a capire da dove provenga la vecchia versione, puoi utilizzare l'applicazione fuslogvw.exe fornita con Visual Studio per ottenere ulteriori informazioni sugli errori di associazione. Microsoft ha informazioni su questo strumento qui . Nota che dovrai abilitare la registrazione impostando la HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion\EnableLogchiave di registro su 1.


19
Non dimenticare che la versione del file non fa parte dell'identità degli assembly. La versione dell'assembly è, ma non deve essere uguale alla versione del file!
Lars Truijens,

Se si utilizza fuslogvw per i servizi, leggere blogs.msdn.com/b/junfeng/archive/2004/02/14/72912.aspx
Nick,

La ricerca del nome file ha risolto il mio problema. Avevo una vecchia versione della dll nella mia cartella temporanea ASP.Net e InstallShield la stava usando invece della versione aggiornata! Soluzione pulita, ricostruzione, riavvio del PC non ha fatto nulla. Ha funzionato bene localmente ed è saltato in aria ogni volta che è stato distribuito.
Jumping,

Immediatamente dopo la costruzione, il mio sito funziona bene, ma poco dopo, questo problema si ripresenta.
Shavais,

Ho modificato questa risposta per dire invece la versione dell'assembly.
Degno 7

60

Mi sono appena imbattuto in questo problema da solo e ho scoperto che il problema era qualcosa di diverso da quello in cui si sono imbattuti gli altri.

Avevo due DLL a cui faceva riferimento il mio progetto principale: CompanyClasses.dll e CompanyControls.dll. Stavo ricevendo un errore di runtime che diceva:

Impossibile caricare il file o l'assembly 'CompanyClasses, Version = 1.4.1.0, Culture = neutral, PublicKeyToken = 045746ba8544160c' o una delle sue dipendenze. La definizione manifest dell'assembly individuato non corrisponde al riferimento dell'assembly

Il problema era che non avevo alcun file CompanyClasses.dll sul mio sistema con un numero di versione 1.4.1. Nessuno nel GAC, nessuno nelle cartelle dell'app ... nessuno da nessuna parte. Ho cercato tutto il mio disco rigido. Tutti i file CompanyClasses.dll che avevo erano 1.4.2.

Il vero problema, ho scoperto, era che CompanyControls.dll faceva riferimento alla versione 1.4.1 di CompanyClasses.dll. Ho appena ricompilato CompanyControls.dll (dopo averlo fatto riferimento a CompanyClasses.dll 1.4.2) e questo errore è andato via per me.


2
+1 Mi è successo qualcosa di simile quando ho una delle mie DLL che fa riferimento a una versione precedente di Caliburn Micro.
Jason Massey,

anche a me, la tua esperienza mi ha stimolato dove devo cercare e ho risolto il problema.
Esen,

Un'altra opzione sarebbe quella di aprire il CompanyControlsprogetto, fare clic con il tasto destro del mouse sul CompanyClasses.dllriferimento -> proprietà ->SpecificVersion = false
BlueRaja - Danny Pflughoeft

questo è molto spesso il caso delle applicazioni xamarin. Ho avuto il progetto xamarin.forms diverso dal progetto xamarin.droid. Ho appena visto il tuo post e l'ho riconosciuto.
Batmaci,

Se CompanyClasses.dll è firmato, quindi SpecificVersion = falseda solo non lo taglierà. Avrai bisogno di un bindingredirect.
Denise Skidmore,

53

Di seguito reindirizza qualsiasi versione dell'assembly alla versione 3.1.0.0. Abbiamo uno script che aggiornerà sempre questo riferimento in App.config, quindi non dovremo più affrontare questo problema.

Tramite reflection è possibile ottenere l'assembly publicKeyToken e generare questo blocco dal file dll stesso.

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
 <dependentAssembly>
    <assemblyIdentity name="Castle.Core" publicKeyToken="407dd0808d44fbdc" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="3.1.0.0" />
  </dependentAssembly>
</assemblyBinding>

Si noti che senza un attributo dello spazio dei nomi XML (xmlns) questo non funzionerà.


1
Questo ha funzionato per me. Ho cambiato 'newVersion = 3.3.3' in 'newVersion = 3.1.0'
jward01

Meglio non scendere lungo il percorso di ribaltamento se puoi evitarlo però. Quando quell'insetto ti morde, morde forte.
BanksySan

1
Il mio problema era il fatto che i reindirizzamenti puntavano a assembly inesistenti. App.Config conteneva le informazioni sugli assembly dagli ultimi pacchetti NuGet che avevo installato. Quando ho eseguito il downgrade di questi pacchetti in seguito, NON è stato possibile ripulirlo. Questa era una libreria di classi standard .NET colpita da un progetto di test di unità framework 4.7.2. Il problema del progetto unit test è stato presentato in fase di esecuzione.
D-Sect,

@ D-Sect ha ragione. Se il tuo controllo del codice sorgente indica che web.config ha delle modifiche (perché hai giocato con i tuoi NuGets), potresti essere saggio a sostenere quei Redirect vincolanti. Il downgrade di NuGets non pulirà i reindirizzamenti di associazione
bkwdesign,

45

Se si utilizza Visual Studio, provare "soluzione pulita" e quindi ricostruire il progetto.


14
Questa è di solito la soluzione per me. Spesso, eliminando bine objfarlo. Fondamentalmente, qualcosa che ho usato per fare riferimento è ancora seduto lì cercando di soddisfare lo stesso requisito. Ad esempio, una vecchia versione è qualcosa a cui ho fatto riferimento direttamente e la nuova versione su NuGet.
David Betz,

Si è verificato questo problema per diverse DLL dopo aver estratto da TFS. Questa soluzione l'ha risolto per me.
Milo

3
Ha funzionato per me. Eliminata la cartella bin amd obj e risolto il problema.
user1619480,

Grazie, ha funzionato anche per me, eliminando semplicemente la cartella bin.
The Cookies Dog,

Per me è stato sufficiente eliminare la bincartella. Sorprendentemente, ho provato una soluzione pulita e ho ricostruito la soluzione prima senza successo. A volte un po 'strano.
Lion

36

Le altre risposte non funzionerebbero per me. Se non ti interessa la versione e vuoi solo che la tua app venga eseguita, fai clic con il pulsante destro del mouse sul riferimento e imposta "versione specifica" su false ... Questo ha funzionato per me. inserisci qui la descrizione dell'immagine


8
Tale impostazione ha effetto solo al momento della compilazione . Dopo che è stato compilato, avrà bisogno della stessa identica versione dell'assembly con cui è stato compilato. Vedere stackoverflow.com/questions/24022134/...
Lars Truijens

22

Ho appena riscontrato questo problema e il problema era che avevo una vecchia copia del DLL nella mia directory di debug dell'applicazione. Potresti anche voler controllare lì (invece del GAC) per vedere se lo vedi.


Abbiamo appena migrato su un server diverso a causa di questo problema perché manteniamo i backup. Ha funzionato dopo aver eliminato le copie di backup. Grazie :)
Jtuck,

22

Adesso farò esplodere la mente di tutti. . .

Elimina tutti i <assemblyBinding>riferimenti dal tuo file .config, quindi esegui questo comando dalla console di NuGet Package Manager:

Get-Project -All | Add-BindingRedirect

Ha funzionato anche per me. Grazie
Oleh Udovytskyi

mi hai salvato il tempo 👌👌
Abdu Imam

4
funziona solo quando il formato di gestione dei pacchetti è package.config, se si utilizza csproj 2017 senza pacchetti.config, non funziona :(
ManiVI,

1
Mente ufficialmente soffiata
BGilman,

è un bel trucco
hexagod l'

21

Ho aggiunto un pacchetto NuGet, solo per rendermi conto che una parte nera della mia applicazione faceva riferimento a una versione precedente della libreria.

Ho rimosso il pacchetto e fatto riferimento al file DLL statico della versione precedente, ma il file web.config non è mai stato aggiornato da:

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

a ciò che avrebbe dovuto ripristinare quando ho disinstallato il pacchetto:

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

Ho visto questo dove, almeno per il modulo Entity Framework quando si utilizza NuGet, se si fa clic con il pulsante destro del mouse sulla soluzione, vai su Gestisci pacchetti NuGet per soluzione, quindi Pacchetti installati> Tutti, seleziona quel modulo, seleziona Gestisci, puoi solitamente deselezionalo dal tuo progetto. Ciò dovrebbe eliminare cose come questa senza doverlo fare manualmente --- supponendo che il venditore abbia fatto la dovuta diligenza. Ma buona cattura come apparentemente a volte no, se è così che l'hai rimosso.
vapcguy,

20

Nel mio caso, questo errore si è verificato durante l'esecuzione di un'applicazione ASP.NET. La soluzione era:

  1. Elimina le cartelle obje binnella cartella del progetto

Clean non funzionava, la ricostruzione non funzionava, tutti i riferimenti andavano bene, ma non stava scrivendo una delle librerie. Dopo aver eliminato quelle directory, tutto ha funzionato perfettamente.


3
Grazie, Levi Fuller. Questa risposta dovrebbe essere più in alto; per la mia situazione era perfetto! Per me questo errore è iniziato quando ho fatto una copia di backup del mio web.config e Visual Studio ha continuato a caricare questo file di configurazione invece della configurazione effettiva, anche dopo aver eliminato la copia duplicata. Questo ha risolto. Grazie.
BruceHill,

Funziona anche per me. Non so ancora perché funzioni :(
KangarooWest,

14

Nel mio caso era una vecchia versione della DLL nella directory C: \ WINDOWS \ Microsoft.NET \ Framework \ ~ \ Temporary ASP.NET Files \. È possibile eliminare o sostituire la versione precedente oppure rimuovere e aggiungere nuovamente il riferimento alla DLL nel progetto. Fondamentalmente, in entrambi i casi verrà creato un nuovo puntatore ai file temporanei ASP.NET.


2
Questo ha funzionato per me quando ho chiuso Visual Studio, arrestato IIS ed eliminato tutti i file temporanei ASP.NET. Nota che ci possono essere file nella cartella Framework e Framework64 se su una macchina a 64 bit, così come nelle cartelle .NET 2.0 e 4.0!
Bryan B,

Ho usato la funzione di ricerca del menu Start di Windows per trovare tutte le DLL create dalla mia soluzione e quindi ho eliminato l'intero lotto, ovunque fossero state trovate. Potrei farlo senza paura perché dovrebbero essere creati solo durante il mio debug di Visual Studio. Poiché VS ricostruirà tali DLL mancanti e nulla al di fuori della mia soluzione dovrebbe fare riferimento a queste, questa è stata un'operazione "sicura" per me.
Zarepheth,

8

Per noi, il problema è stato causato da qualcos'altro. Il file di licenza per i componenti DevExpress includeva due righe, una per una versione precedente dei componenti che non era installata su questo particolare computer. La rimozione della versione precedente dal file di licenza ha risolto il problema.

La parte fastidiosa è che il messaggio di errore non ha fornito indicazioni su quale riferimento causasse i problemi.


2
Nel mio caso, dopo l'aggiornamento alla nuova versione di DevExpress, il file .resx di un modulo conteneva riferimenti alla vecchia versione della libreria disinstallata. Ho dovuto aprire .resx in vista codice e correggere la versione con una nuova o eliminare le voci non valide.
Artemix,

5

Questo stesso errore esatto viene generato se si tenta di eseguire il binding tardivo mediante la riflessione, se l'assembly a cui si sta eseguendo il collegamento viene assegnato un nome sicuro o il relativo token di chiave pubblica è stato modificato. L'errore è lo stesso anche se in realtà non è stato trovato alcun assembly con il token di chiave pubblica specificato.

È necessario aggiungere il token di chiave pubblica corretto (è possibile ottenerlo utilizzando sn -T sulla dll) per risolvere l'errore. Spero che sia di aiuto.


1
Si prega di elaborare: che cos'è "sn -T"? E dove posso aggiungere il token della chiave pubblica?
Moritz entrambi il

3
"sn.exe" è uno strumento fornito con Visual Studio, è uno strumento da riga di comando che può essere eseguito dal prompt dei comandi di Visual Studio. Basta eseguire il prompt dei comandi di Visual Studio (dal menu Start), accedere alla cartella che contiene l'assembly e digitare "sn -T <assembly>" dove <assembly> è il nome completo della dll. Ciò ottiene le informazioni "token" dell'Assemblea. Una volta che hai questo, quando stai eseguendo l'associazione tardiva con la riflessione, inserisci le informazioni sul token nella stringa id dell'assembly (ovvero, "Assembly = MyAssembly.dll, token chiave pubblica = <token guid>)
Guy Starbuck,

2
Grazie per questa risposta Ho riscontrato questo errore quando ho fatto riferimento a una sezione di configurazione nel mio App.ini. Di recente avevo firmato l'assembly, quindi PublicKeyToken = null doveva essere aggiornato con il nuovo token (corretto).
Liam,

5

La mia era una situazione molto simile alla posta di Nathan Bedford ma con una leggera svolta. Anche il mio progetto ha fatto riferimento alla DLL modificata in due modi. 1) Direttamente e 2) Indirettamente facendo riferimento a un componente (libreria di classi) che a sua volta aveva un riferimento alla DLL modificata. Ora il mio progetto Visual Studio per il componente (2) faceva riferimento alla versione corretta della DLL modificata. Tuttavia, il numero di versione del componente stesso NON è stato modificato. Di conseguenza, l'installazione della nuova versione del progetto non è riuscita a sostituire quel componente sul computer client.

Risultato finale: il riferimento diretto (1) e il riferimento indiretto (2) puntavano a versioni diverse della DLL modificata sul computer client. Sulla mia macchina di sviluppo ha funzionato bene.

Soluzione: rimuovere l'applicazione; Elimina tutte le DLL dalla cartella dell'applicazione; Reinstalla Semplice come quello nel mio caso.


4

Lascerò che qualcuno tragga beneficio dalla mia stupidità di taglio. Ho alcune dipendenze per un'applicazione completamente separata (chiamiamo questa App1). Le DLL di quell'App1 vengono inserite nella mia nuova applicazione (App2). Ogni volta che faccio aggiornamenti in APP1, devo creare nuove dll e copiarle in App2. Bene. . Mi sono stancato di copiare e incollare tra 2 diverse versioni di App1, quindi ho semplicemente aggiunto un prefisso "NEW_" alle DLL.

Bene. . . Sto indovinando che il processo di compilazione analizza la cartella / bin e quando corrisponde in modo errato a qualcosa, si blocca con lo stesso messaggio di errore di cui sopra. Ho cancellato le mie versioni "new_" e le ho costruite semplicemente dandy.


4

Il mio problema era copiare il codice sorgente su una nuova macchina senza trasferire nessuno degli assembly di riferimento.

Nulla di ciò che ho fatto ha corretto l'errore, quindi in fretta, ho eliminato del tutto la directory BIN. Ricostruito il mio codice sorgente, e ha funzionato da allora in poi.


4

Vorrei solo aggiungere che stavo creando un progetto ASP.NET MVC 4 di base e ho aggiunto DotNetOpenAuth.AspNet tramite NuGet. Ciò ha comportato lo stesso errore dopo aver fatto riferimento a un file DLL non corrispondente per Microsoft.Web.WebPages.OAuth.

Per aggiustarlo ho fatto un Update-Package e pulito la soluzione per una ricostruzione completa.

Ha funzionato per me ed è un po 'un modo pigro, ma il tempo è denaro :-P


1
Risposta simile per me. Update-Package -reinstallreinstalla tutti i pacchetti NuGet nella stessa versione.
Jess

1
Questo è fantastico; grazie per la pubblicazione. Ho provato tutti questi altri ottimi suggerimenti, ma questa è stata la soluzione che ha funzionato. Per fortuna per le persone che sono ancora disposte a pubblicare una soluzione alternativa, anche quando ce ne sono 80 disponibili
Hambone,

4

Ho riscontrato questo errore durante la creazione del servizio di build di Team Foundation Server. Si è scoperto che avevo diversi progetti nella mia soluzione utilizzando diverse versioni della stessa libreria aggiunta con NuGet. Ho rimosso tutte le vecchie versioni con NuGet e ho aggiunto quella nuova come riferimento per tutti.

Team Foundation Server mette tutti i file DLL in una directory e, naturalmente, può esistere un solo file DLL con un determinato nome alla volta.


Un altro modo è fare clic su "Gestisci pacchetti NuGet per soluzione ..." e aggiornare sia il progetto di test che il progetto in prova alla stessa (più recente) versione.
lixonn,

4

La mia app.config contiene a

<bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.11.0"/>

per npgsql. In qualche modo sul computer dell'utente, il mio app.exe.config è scomparso. Non sono ancora sicuro che si tratti di un utente sciocco, di un problema con l'installer o di un anti-virus. La sostituzione del file ha risolto il problema.


3

Ho appena trovato un altro motivo per ottenere questo errore. Ho pulito il mio GAC da tutte le versioni di una libreria specifica e ho creato il mio progetto con riferimento alla versione specifica distribuita insieme all'eseguibile. Quando eseguo il progetto ho ottenuto questa eccezione cercando una versione più recente della libreria.

Il motivo era la politica del publisher . Quando ho disinstallato le versioni della libreria da GAC, ho dimenticato di disinstallare anche gli assembly dei criteri del publisher, quindi, invece di utilizzare il mio assembly distribuito localmente, il programma di caricamento degli assembly ha trovato il criterio del publisher in GAC che gli ha detto di cercare una versione più recente.


3

Per me la configurazione della copertura del codice nel file "Local.testtesttings" "ha causato" il problema. Ho dimenticato di aggiornare i file a cui è stato fatto riferimento lì.


3

L'eliminazione del contenuto della cartella bin del progetto e la ricostruzione della soluzione hanno risolto il mio problema.


1
Bene, cosa sai, mi hai appena aiutato a risolvere la mia miseria, grazie davvero
Ronny Mahlangu,

2

ripulire e ricostruire la soluzione potrebbe non sostituire tutte le DLL dalla directory di output.

quello che suggerirò è provare a rinominare la cartella da "bin" a "oldbin" o "obj" a "oldobj"

e poi prova a ricostruire la tua silenziosità.

in caso di utilizzo di dll di terze parti, sarà necessario copiarle nella cartella "bin" o "obj" appena creata dopo la compilazione corretta.

spero che questo funzionerà per te.


1

Potrebbe essere utile eliminare manualmente il vecchio assieme dalla posizione della cartella e quindi aggiungere il riferimento ai nuovi assiemi.


1

Ho avuto lo stesso errore ... Nel mio caso è stato risolto come segue:

  • Inizialmente quando l'applicazione era installata, le persone qui avevano usato Microsoft Enterprise Library 4.1 nell'applicazione.
  • Nella settimana precedente il mio computer era formattato e dopo quello oggi, quando ho creato quell'applicazione, mi ha dato un errore che mancava l'assemblaggio della Libreria Enterprise.
  • Quindi ho installato Microsoft Enterprise Library 5.0 che ho ottenuto su Google come prima voce di ricerca.
  • Quindi, quando ho creato l'applicazione, mi ha dato l'errore precedente, ovvero la definizione manifest dell'assembly individuato non corrisponde al riferimento dell'assembly.
  • Dopo gran parte del lavoro di ricerca e analisi, ho scoperto che l'applicazione si riferiva alla 4.1.0.0 e che la DLL nella cartella bin era della versione 5.0.0.0
  • Quello che ho fatto è stato quindi installare la Microsoft Enterprise Library 4.1.
  • Rimosso il riferimento precedente (5.0) e aggiunto il riferimento 4.0.
  • Costruito l'applicazione e voilà ... ha funzionato.

1

Ecco il mio metodo per risolvere questo problema.

  1. Dal messaggio di eccezione, ottenere il nome della libreria "problem" e il numero di versione "previsto".

inserisci qui la descrizione dell'immagine

  1. Trova tutte le copie di quel .dll nella tua soluzione, fai clic con il tasto destro su di esse e controlla quale versione del .dll è.

inserisci qui la descrizione dell'immagine

Ok, quindi in questo esempio, il mio .dll è sicuramente 2.0.5022.0 (quindi il numero di versione dell'eccezione è sbagliato).

  1. Cerca il numero di versione che è stato mostrato nel messaggio Eccezione in tutti i file .csproj nella tua soluzione. Sostituisci questo numero di versione con il numero effettivo dalla dll.

Quindi, in questo esempio, vorrei sostituire questo ...

<Reference Include="DocumentFormat.OpenXml, Version=2.5.5631.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />

... con questo...

<Reference Include="DocumentFormat.OpenXml, Version=2.0.5022.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />

Lavoro fatto !


cosa succede se i miei file csproj non hanno una versione referenziata?
John Demetriou,

1

Nel mio caso il problema era tra la sedia e la tastiera :-)

Could not load file or assembly 'DotNetOpenAuth.Core, Version=4.0.0.0,
Culture=neutral, PublicKeyToken=2780ccd10d57b246' or one of its dependencies.
The located assembly's manifest definition does not match the assembly reference.
(Exception from HRESULT: 0x80131040)

Due o più assembly diversi volevano utilizzare una versione diversa della libreria DotNetOpenAuth e questo non sarebbe un problema. Inoltre, sul mio computer locale un web.config è stato automaticamente aggiornato da NuGet:

<dependentAssembly>
    <assemblyIdentity name="DotNetOpenAuth.AspNet" publicKeyToken="2780ccd10d57b246" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.3.0.0" newVersion="4.3.0.0" />
    </dependentAssembly>
    <dependentAssembly>
        <assemblyIdentity name="DotNetOpenAuth.Core" publicKeyToken="2780ccd10d57b246" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-4.3.0.0" newVersion="4.3.0.0" />
</dependentAssembly>

Poi ho capito che avevo dimenticato di copiare / distribuire il nuovo web.config sul server di produzione. Quindi, se hai un modo manuale di distribuire web.config, controlla che sia aggiornato. Se si dispone di web.config completamente diverso per il server di produzione, è necessario unire queste sezioni di assemblaggio dipendente in sincronia dopo aver utilizzato NuGet.


1

Se si verifica un errore del tipo " La definizione manifest dell'assembly individuato non corrisponde al riferimento dell'assembly " e se è stato aggiornato tramite Progetto> Gestisci pacchetti NuGet e la scheda Aggiorna in VS , la prima cosa che puoi fare è provare a installare un'altra versione del pacchetto dopo aver verificato le versioni dalla pagina NuGet Gallery ed eseguito il comando folowing dalla console di Package Manager:

PM> Install-Package YourPackageName -Version YourVersionNumber 
//Example
PM> Install-Package Microsoft.Extensions.FileProviders.Physical -Version 2.1.0

Sebbene la risposta non sia direttamente correlata al pacchetto in questione ed è stata chiesta molto tempo fa, è piuttosto generica, ancora pertinente e spero che aiuti qualcuno.


1

Nessuna soluzione ha funzionato per me. Ho provato a pulire la soluzione del progetto, rimuovere il cestino, aggiornare il pacchetto, eseguire il downgrade del pacchetto e così via ... Dopo due ore ho caricato App.config predefinito dal progetto con assembly e lì ho cambiato la versione di riferimento errata da:

<dependentAssembly>
    <assemblyIdentity name="Microsoft.IdentityModel.Logging" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-5.5.0.0" newVersion="5.5.0.0" />
</dependentAssembly>

per:

<dependentAssembly>
    <assemblyIdentity name="Microsoft.IdentityModel.Logging" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-3.14.0.0" newVersion="5.5.0.0" />
</dependentAssembly>

Dopo questo ho pulito il progetto, lo costruisco di nuovo e ha funzionato. Nessun avviso nessun problema.


0

Ho ricevuto questo messaggio di errore a causa del riferimento a un assembly con lo stesso nome dell'assembly che stavo costruendo.

Questo è stato compilato ma ha sovrascritto l'assembly di riferimento con l'assembly dei progetti correnti, causando così l'errore.

Per risolverlo ho cambiato il nome del progetto e le proprietà dell'assembly disponibili facendo clic con il tasto destro del mouse sul progetto e scegliendo 'Proprietà'.

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.