2009-10-22 1 views
16

Ho una soluzione con 3 progetti (GUI, BL e DAL). L'assembly DAL è firmato e distribuito nel GAC.Priorità di caricamento dell'assembly .NET

Quando si genera la soluzione, il DAL viene compilato e l'assembly viene inserito nella cartella bin del progetto principale. Ma quando eseguo l'applicazione, carica la versione GAC invece di quella locale. Perchè è questo?

L'ho capito perché la versione del GAC non era l'ultima e mancavano alcuni metodi, anche se compilato correttamente.

Il GAC ha la priorità sulla cartella bin locale?

T in anticipo

risposta

19

Risposta breve , il GAC ha la precedenza sui file locali.
questo è un comportamento diverso da quello a cui siamo abituati nel mondo dll nativo (escludendo alcune DLL di sistema che sono sempre state caricate da SYSTEM32, non importa quale).

Perché?
Immaginate di avere più applicazioni con lo stesso assembly ora che l'assembly ha un bug come si riparano tutte le applicazioni? È difficile avviare la ricerca di tutte le applicazioni su tutti i driver, è più facile distribuire un singolo assembly sul GAC e risolvere tutte le applicazioni contemporaneamente.

Per quanto riguarda il problema, se si modifica l'API è necessario modificare la versione di assemblaggio di tale assembly, in questo modo il motore di fusione prenderà la versione che si trova nella cartella locale.

+0

Tks per la risposta, specialmente per l'ultima parte relativa al controllo delle versioni. – Dante

7

Sì, controllare prima il GAC. Le regole di caricamento sono documentate here. Per risolvere il tuo problema, devi aggiornare la versione dell'assembly mentre modifichi l'API.

+0

Tks per il collegamento, molto utile! – Dante