2010-06-04 16 views
5

Dopo aver letto l'articolo MSDN How the Runtime Locates Assemblies e aver letto anche this, non sono ancora sicuro di come gli assembly con nome debolmente vengano risolti in fase di runtime.. Conflitto di confusione degli assiemi

Es. se ho un riferimento a qualche file dll nel mio progetto, ho compilare e distribuire, sarà raccogliere una nuova versione del file DLL di riferimento se ho appena sostituire quello vecchio che è stato effettivamente fatto riferimento al momento della compilazione? Importa se il riferimento nel file di progetto specifica la versione ecc. Dell'assembly di riferimento?

Qualsiasi chiarimento ammessi

risposta

0

La risposta alle vostre domande è sì il più a lungo finché si dispone di Specific Version impostato per False nelle proprietà per il riferimento al montaggio.

+0

Questo non è corretto, si applica solo al momento della compilazione. –

1

Il posto migliore che ho trovato per conoscere questo è in Grimes Fusion workshop come può essere trovato here. È molto completo pur essendo ancora facile da capire.

0

Se la versione non è menzionato che prenderà il riferimento, se la versione è menzionato che cercherà di trovare e caricare l'assembly corrispondenza della firma con la versione menzionato. se non trovato, genererà un'eccezione. Per risolvere questo problema è possibile eseguire il reindirizzamento del bind di assemblaggio.

2

Se il gruppo non si trova nel GAC poi il CLR cercherà nel "percorso di sondaggio". Quale per impostazione predefinita è solo la directory che contiene l'EXE. Cerca solo una corrispondenza sul nome dell'assembly e interromperà la ricerca nella prima corrispondenza.

E poi controlla il numero [AssemblyVersion]. Se non corrisponde otterrai un'eccezione, non continuerà a cercare un altro assembly con lo stesso nome. Ogni volta che si hanno problemi di risoluzione, si vorrà utilizzare l'utilità Fuslogvw.exe. Ti mostra esattamente dove si trovava il CLR e cosa è andato storto.

+0

I riferimenti deboli si preoccupano del numero di versione? La mia esperienza è che si abbina solo per nome se si è nel percorso di sondaggio (non sono sicuro di GAC, ma non sarebbe debole). –

+1

Non importa se il nome è forte o no. Solo il GAC è in grado di risolvere un assembly referenziato per numero di versione. Le ricerche del percorso di sondaggio vengono eseguite solo per nome, il numero di versione viene comunque controllato dopo che è stato trovato un assieme. –