[.net] Avviso: trovati conflitti tra diverse versioni dello stesso assembly dipendente


Answers

Fondamentalmente ciò accade quando gli assembly a cui si fa riferimento hanno "Copy Local" impostato su "True", ovvero una copia della DLL viene collocata nella cartella bin insieme al proprio exe.

Dal momento che Visual Studio copierà anche tutte le dipendenze di un assembly referenziato, è possibile finire con due differenti build dello stesso assembly a cui si fa riferimento. Questo è più probabile che accada se i progetti sono in soluzioni separate e possono quindi essere compilati separatamente.

Il modo in cui mi sono aggirato è impostare Copy Local su False per i riferimenti nei progetti di assemblaggio. Fallo solo per eseguibili / applicazioni web in cui è necessario eseguire l'assemblaggio per l'esecuzione del prodotto finito.

Spero che abbia senso!

Question

Attualmente sto sviluppando un'applicazione .NET, che consiste in 20 progetti. Alcuni di questi progetti sono compilati utilizzando .NET 3.5, altri ancora sono progetti .NET 2.0 (finora nessun problema).

Il problema è che se includo un componente esterno ottengo sempre il seguente avviso:

"Found conflicts between different versions of the same dependent assembly".

Che cosa significa esattamente questo avviso e c'è forse la possibilità di escludere questo avviso (come l'uso della disabilitazione #pragma nei file del codice sorgente)?




Questo è successo anche a me. Una dll è stata referenziata due volte: una volta direttamente (nei riferimenti) e una volta indirettamente (a cui fa riferimento un altro progetto di riferimento). Ho rimosso il riferimento diretto, pulito e ricostruito la soluzione. Problema risolto




Su Visual Studio se si fa clic con il tasto destro sulla soluzione e si gestiscono i pacchetti di nuget, esiste una scheda "Consolida" che imposta tutti i pacchetti sulla stessa versione.




Ho avuto lo stesso problema con uno dei miei progetti, tuttavia, nessuno dei precedenti ha aiutato a risolvere l'avvertimento. Ho controllato il file di log di build dettagliato, ho usato AsmSpy per verificare che ho usato le versioni corrette per ogni progetto nella soluzione interessata, ho controllato le voci effettive in ogni file di progetto - niente di utile.

Alla fine si è scoperto che il problema era una dipendenza nidificata di uno dei riferimenti che avevo in un progetto. Questo riferimento (A) a sua volta richiedeva una versione diversa di (B) a cui si faceva riferimento direttamente da tutti gli altri progetti nella mia soluzione. L'aggiornamento del riferimento nel progetto di riferimento lo ha risolto.

Solution A
+--Project A
   +--Reference A (version 1.1.0.0)
   +--Reference B
+--Project B
   +--Reference A (version 1.1.0.0)
   +--Reference B
   +--Reference C
+--Project C
   +--Reference X (this indirectly references Reference A, but with e.g. version 1.1.1.0)

Solution B
+--Project A
   +--Reference A (version 1.1.1.0)

Spero che quanto sopra mostra cosa intendo, mi ci sono volute un paio d'ore per scoprirlo, quindi spero che anche qualcun altro ne trarrà beneficio.




Un'altra cosa da considerare e controllare è assicurarsi di non avere alcun servizio in esecuzione che usi quella cartella bin. se il loro è interrompere il servizio e ricostruire la soluzione




Questo in realtà dipende dal tuo componente esterno. Quando si fa riferimento a un componente esterno in un'applicazione .NET, viene generato un GUID per identificare tale componente. Questo errore si verifica quando il componente esterno a cui fa riferimento uno dei tuoi progetti ha lo stesso nome e una versione diversa rispetto a un altro componente di questo tipo in un altro assieme.

Questo a volte accade quando si usa "Sfoglia" per trovare riferimenti e aggiungere la versione errata dell'assieme, oppure si ha una versione diversa del componente nel proprio repository di codice come quella installata nel computer locale.

Prova a trovare i progetti che presentano questi conflitti, rimuovi i componenti dall'elenco di riferimento, quindi aggiungili di nuovo assicurandoti di puntare allo stesso file.




=> verifica ci sarà qualche istanza dell'applicazione installata parzialmente.

=> prima di tutto disinstallare quell'istanza dall'applicazione di disinstallazione.

=> quindi, pulisci, Ricostruisci e prova a distribuire.

questo ha risolto il mio problema. Anche questo ti aiuta. I migliori saluti.