Condividi tramite


Riferimenti di assembly parziali

Aggiornamento: novembre 2007

Un riferimento di assembly completo include il nome in formato testo, la versione, la lingua e il token di chiave pubblica (in caso di assembly con nome sicuro) dell'assembly. È necessario un riferimento di assembly completo se si fa riferimento a un assembly che è parte di Common Language Runtime o che si trova nella Global Assembly Cache. È anche possibile fare riferimento a un assembly in modo dinamico fornendo informazioni parziali, ad esempio solo il nome dell'assembly.

Non è consigliabile utilizzare riferimenti parziali agli assembly, poiché possono causare numerosi problemi di controllo delle versioni:

  • Le versioni dell'assembly potrebbero non essere compatibili con le versioni precedenti. Può accadere ad esempio che il codice funzioni con la versione 1.6 dell'assembly, ma a causa del riferimento parziale all'assembly è possibile che si ottenga una versione più recente contenente una modifica incompatibile.

  • Le versioni dell'assembly potrebbero non essere compatibili con le versioni successive. Può accadere ad esempio che il codice funzioni con la versione 1.6 dell'assembly, ma a causa del riferimento parziale all'assembly è possibile che si ottenga una versione meno recente priva del codice necessario.

  • Se la nuova versione non è compatibile, è possibile che un'applicazione in cui viene installata una nuova versione di un assembly pregiudichi l'esecuzione delle applicazioni in cui vengono utilizzati riferimenti parziali all'assembly per il caricamento dell'assembly.

A causa dell'elevato rischio di problemi di controllo delle versioni, il metodo LoadWithPartialName è contrassegnato come obsoleto in .NET Framework versione 2.0.

Creazione di riferimenti parziali agli assembly

Per creare un riferimento parziale a un assembly nel codice, utilizzare una delle seguenti procedure:

  • Utilizzare un metodo quale System.Reflection.Assembly.Load e specificare solo un riferimento parziale. La ricerca dell'assembly da parte del runtime viene eseguita nella directory dell'applicazione.

  • Utilizzare il metodo System.Reflection.Assembly.LoadWithPartialName e specificare solo un riferimento parziale. La ricerca dell'assembly da parte del runtime viene eseguita nella directory dell'applicazione e nella Global Assembly Cache.

Nota:

Il metodo LoadWithPartialName è obsoleto in .NET Framework versione 2.0.

L'utilizzo del metodo LoadWithPartialName può introdurre una certa variabilità nel processo di associazione. Se, ad esempio, si richiede un'associazione a un assembly con un nome sicuro ma nel riferimento non si include la chiave pubblica, è possibile che l'assembly a cui viene fatta l'associazione non provenga dall'editore previsto. Inoltre, i riferimenti che non contengono il token di chiave pubblica non sono soggetti ai criteri di versione, pertanto i file di configurazione del computer e dell'applicazione non vengono mai controllati. I riferimenti parziali in cui si utilizza il metodo LoadWithPartialName risultano più vantaggiosi in scenari in cui si desidera scegliere l'ultima versione di un assembly.

Riferimenti parziali mediante il metodo LoadWithPartialName

Nota:

Il metodo LoadWithPartialName è obsoleto in .NET Framework versione 2.0.

In una chiamata al metodo LoadWithPartialName deve essere incluso almeno il nome in formato testo dell'assembly, ma può essere specificato anche il token di chiave pubblica, la versione o la lingua. Poiché questo metodo è specifico per i riferimenti parziali, non è obbligatorio inserire informazioni di riferimento complete, ovvero il nome, la versione, la lingua e, se utilizzabile, il token di chiave pubblica.

Quando si crea un riferimento parziale a un assembly con il metodo LoadWithPartialName, per individuare l'assembly a cui viene fatto riferimento il runtime utilizza le seguenti regole specifiche:

  1. Viene controllato se nel file di configurazione dell'applicazione sono presenti le informazioni complete sul riferimento nell'elemento <qualifyAssembly>. Se viene individuata una voce valida, l'associazione prosegue come se si trattasse di un riferimento completo.

  2. Viene quindi eseguita la ricerca di un assembly il cui nome corrisponda a quello specificato nella directory dell'applicazione. Se viene individuata una corrispondenza, il runtime utilizza l'assembly trovato.

  3. Se non viene individuata alcuna corrispondenza nella directory dell'applicazione, il runtime cerca l'assembly nella Global Assembly Cache. Se nel riferimento parziale è stato specificato il token di chiave pubblica, la versione o la lingua, il runtime tenta di individuare un valore esattamente corrispondente. Se non è stata specificata la versione, tenta di individuare l'assembly con il numero di versione più alto che soddisfi tutti gli altri criteri definiti. Se non è stata specificata la lingua o il token di chiave pubblica, il comportamento del runtime è indefinito.

    Si supponga che venga eseguita la chiamata Assembly.LoadWithPartialName("math, Version 5.0.0.0") e che il contenuto della Global Assembly Cache sia il seguente:

    math,version=5.0.0.0,publicKeyToken=11111111,culture=de
    math,version=5.0.0.0,publicKeyToken=22222222,culture=en
    

    Il risultato della chiamata sarà indefinito. Il runtime seleziona il primo assembly rilevato.

    Si supponga ora che venga eseguita la chiamata Assembly.LoadWithPartialName("math") e che il contenuto della Global Assembly Cache sia il seguente:

    math,version=5.0.0.0,publicKeyToken=11111111,culture=neutral
    math,version=6.0.0.0,publicKeyToken=22222222,culture=neutral
    

    Il risultato della chiamata è un'associazione all'assembly math, versione 6.0.0.0.

    Si supponga infine che venga eseguita la chiamata Assembly.LoadWithPartialName("math,publicKeyToken=11111111") e che il contenuto della Global Assembly Cache sia il seguente:

    math,version=5.0.0.0,publicKeyToken=11111111,culture=neutral
    math,version=6.0.0.0,publicKeyToken=22222222,culture=neutral
    

    Il risultato della chiamata è un'associazione all'assembly math, versione 5.0.0.0.

Riferimenti parziali con informazioni complete

È possibile creare un riferimento dinamico utilizzando un metodo, quale System.Reflection.Assembly.Load, e fornire informazioni parziali, specificando però le informazioni complete sul riferimento con l'elemento <qualifyAssembly> nel file di configurazione dell'applicazione. Questo elemento consente di specificare tutte le informazioni sul riferimento, ovvero il nome, la versione, la lingua e, se utilizzabile, il token di chiave pubblica, nel file di configurazione dell'applicazione anziché nel codice.

Nota:

Il tipo di riferimento parziale descritto sopra non può essere utilizzato con gli assembly condivisi tra diverse applicazioni. Poiché le impostazioni di configurazione vengono definite a livello di applicazione e non a livello di assembly, se è presente un assembly condiviso in cui si utilizza questo tipo di riferimento parziale, per ciascuna applicazione in cui si utilizza l'assembly condiviso deve essere presente un file di configurazione con le informazioni complete sull'assembly.

Vedere anche

Concetti

Come il runtime individua gli assembly

Scenari di distribuzione di applicazioni .NET Framework

Passaggio 1: esame dei file di configurazione

Passaggio 2: controllo di assembly a cui è stato fatto riferimento in precedenza

Passaggio 3: controllo della Global Assembly Cache

Passaggio 4: individuazione dell'assembly mediante basi di codice o ricerca