Domanda

Ho una soluzione con 3 progetti (GUI, BL e DAL). L'assemblea DAL è firmata e distribuita nel GAC.

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

Mi sono reso conto che, poiché la versione nel GAC non era la più recente e mancavano alcuni metodi, anche se compilata bene.

Il GAC ha la priorità sulla cartella bin locale?

Tks in anticipo

È stato utile?

Soluzione

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

Perché?
Immagina di avere più applicazioni con lo stesso assembly ora che tale assembly presenta un bug. Come risolvi tutte le tue applicazioni? È difficile iniziare la ricerca di tutte le applicazioni su tutti i driver, è più facile distribuire un singolo assembly nel GAC e riparare tutte le applicazioni contemporaneamente.

Per quanto riguarda il tuo problema, se cambi API devi cambiare la versione dell'assembly di quell'assemblaggio, in questo modo il motore di fusione prenderà la versione che si trova nella cartella locale.

Altri suggerimenti

Sì, controlla prima il GAC. Le regole di caricamento sono documentate qui . Per risolvere il problema, è necessario aggiornare la versione dell'assembly quando si cambia l'API.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top