Domanda

Cosa è considerata la migliore pratica quando si tratta di assemblaggi e rilasci?

Mi piacerebbe poter fare riferimento a più versioni della stessa libreria: la soluzione contiene più progetti che dipendono da diverse versioni di una libreria commonutils.dll che costruiamo noi stessi.

Poiché tutte le dipendenze vengono copiate nel bin/debug o nel bin/release, lì può esistere solo una singola copia di commonutils.dll nonostante ciascuno dei file DLL abbia numeri di versione dell'assembly diversi.

Devo includere i numeri di versione nel nome dell'assembly per poter fare riferimento a più versioni di una libreria o esiste un altro modo?

È stato utile?

Soluzione

Ecco in cosa ho vissuto...

Dipende dallo scopo per cui prevedi di utilizzare i file DLL.Li classifico in due gruppi principali:

  1. Assemblee senza uscita.Questi sono file EXE e file DLL a cui non hai intenzione di fare riferimento da nessuna parte.Basta nominarli debolmente e assicurarsi di avere i numeri di versione rilasciati contrassegnati nel controllo del codice sorgente, in modo da poter eseguire il rollback in qualsiasi momento.

  2. Assemblee referenziate.Assegnare un nome sicuro a questi in modo da poter fare riferimento a più versioni di esso da altri assembly.Utilizzare il nome completo per fare riferimento ad essi (Assembly.Load).Conserva una copia della sua versione più recente e migliore in un luogo in cui altro codice possa farvi riferimento.

Successivamente, puoi scegliere se copiare in locale o meno i tuoi riferimenti.Fondamentalmente, il compromesso si riduce a: vuoi acquisire patch/aggiornamenti dai tuoi riferimenti?Può esserci un valore positivo nell'ottenere nuove funzionalità, ma d'altra parte potrebbero esserci cambiamenti importanti.La decisione qui, a mio avviso, dovrebbe essere presa caso per caso.

Durante lo sviluppo in Visual Studio, per impostazione predefinita utilizzerai la versione più recente compilare with, ma una volta compilato l'assembly di riferimento richiederà la versione specifica con cui è stato compilato.

La tua ultima decisione è copiare locale o meno.Fondamentalmente, se disponi già di un meccanismo per distribuire l'assembly di riferimento, impostalo su false.

Se stai pianificando un grande sistema di gestione dei rilasci, probabilmente dovrai dedicare molta più attenzione e attenzione a questo.Per me (piccolo negozio - due persone), funziona bene.Sappiamo cosa sta succedendo e non ci sentiamo trattenuti avendo fare le cose in un modo che non ha senso.

Una volta raggiunto il runtime, Assembly.Carica tutto ciò che desideri nel file dominio applicativo.Quindi puoi utilizzare Assembly.GetType per raggiungere il tipo desiderato.Se disponi di un tipo presente in più assembly caricati (ad esempio in più versioni dello stesso progetto), potresti ottenere un AmbiguousMatchException eccezione.Per risolverlo, dovrai ottenere il tipo da un'istanza di una variabile di assembly, non dal metodo statico Assembly.GetType.

Altri suggerimenti

Gli assembly possono coesistere nella GAC ​​(Global Assembly Cache) anche se hanno lo stesso nome dato che la versione è diversa.Ecco come funzionano gli assembly forniti da .NET Framework.Requisito che deve essere soddisfatto affinché un'assemblea possa essere registrata al GAC è la firma.

L'aggiunta dei numeri di versione al nome dell'Assembly vanifica l'intero scopo dell'ecosistema dell'assembly ed è ingombrante, IMHO.Per sapere quale versione di un dato assembly basta aprire la finestra Proprietà e verificare la versione.

Dare nomi diversi a diverse versioni dell'assembly è il modo più semplice e funziona sicuramente.

Se l'assembly (commonutils.dll) ha un nome sicuro (ad es.firmato), puoi pensare di installarlo nella GAC ​​(Global Assembly Cache - puoi installare diverse versioni dello stesso assembly fianco a fianco nella GAC), quindi l'applicazione chiamante ottiene automaticamente la versione corretta da lì perché .NET I tipi includono informazioni sulla versione dell'assembly.

Nel tuo progetto VS fai riferimento alla versione corretta della libreria, ma non la distribuisci nella cartella dell'applicazione;lo installi invece nel GAC (durante la configurazione dell'applicazione).

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