2014-07-01 9 views
8

Ho avuto qualche problema con la versione di dll presente nel manifest e la versione attuale presente nella cartella build. Cambiare l'opzione build dettagliata ha dato queste informazioni:Cosa significa .NET per 'primario' quando si sceglie tra riferimento dll conflitto?

C'è stato un conflitto tra "Microsoft.Practices.EnterpriseLibrary.Common, Version = 5.0.505.0, Lingua = il neutro PublicKeyToken = 31bf3856ad364e35" e " Microsoft.Practices.EnterpriseLibrary.Common, Version = 6.0.0.0, Culture = neutro, PublicKeyToken = 31bf3856ad364e35 ".

"Microsoft.Practices.EnterpriseLibrary.Common, Version = 5.0.505.0, Lingua = il neutro PublicKeyToken = 31bf3856ad364e35" è stato scelto perché era primario e "Microsoft.Practices.EnterpriseLibrary.Common, Version = 6.0. 0.0, Culture = neutro, PublicKeyToken = 31bf3856ad364e35 "era no.

Nella seconda sezione si dice che la versione particolare è stata scelta come era primaria.

Qual è il significato di primario?

Saluti.

risposta

9

Si sta chiedendo a MSBuild di risolvere un problema di inferno della DLL. È necessario copiare Microsoft.Practices.EnterpriseLibrary.Common.dll nella directory di output di build in modo da poter eseguire il programma. Ma fai riferimento a due diverse versioni di esso. Questo non può funzionare, uno sovrascriverà l'altro e sarà una schifezza che vincerà.

Quindi è necessario indovinare quale è più "importante". Uno dei tuoi assembly ha una dipendenza "primaria", fa riferimento direttamente ai tipi all'interno di Microsoft.Practices.EnterpriseLibrary.Common.dll. Un altro dei vostri gruppi ha una dipendenza indiretta , utilizza un assembly che è stato creato con la versione 6.0.0.0 di asssembly. Costretto a indovinare, MSBuild presume che quello primario sia più importante.

È solo una supposizione. È potrebbe funzionare, è necessario un <BindingRedirect> nel file app.exe.config per mappare la richiesta per la versione 6.0.0.0 dell'assembly alla versione 5.0.505.0 poiché la versione 6.0.0.0 non sarà disponibile. Avere una mancata corrispondenza della versione principale non è mai una buona notizia, una TypeLoadException o MissingMethodException in fase di runtime non dovrebbe sorprenderti. Se ciò non funziona, installare questi assembly nel GAC potrebbe essere una soluzione alternativa, non è necessario copiare le DLL in questo modo. Ovviamente la vera soluzione è avere sempre e solo una dipendenza specifica.

Problemi correlati