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

Aggiornamento: novembre 2007

Dopo aver determinato la versione corretta dell'assembly utilizzando le informazioni nel riferimento dell'assembly chiamante e nei file di configurazione e dopo aver eseguito un controllo nella Global Assembly Cache (solo per gli assembly con nome sicuro), Common Language Runtime tenta di individuare l'assembly effettuando le operazioni seguenti:

  1. Se nel file di configurazione dell'applicazione viene rilevato un elemento <codeBase>, il runtime verifica il percorso specificato. Se viene individuato un assembly che soddisfa la richiesta, tale assembly viene utilizzato e non vengono eseguite ulteriori ricerche. Se non viene individuato alcun assembly, la richiesta di associazione non viene completata.

  2. Il runtime esegue la ricerca dell'assembly a cui è stato fatto riferimento utilizzando le regole specificate più avanti in questa sezione.

Nota:

Se sono presenti più versioni di un assembly in una directory e si desidera fare riferimento a una versione specifica, è necessario utilizzare l'elemento <codeBase> invece dell'attributo privatePath dell'elemento <probing>. Se si utilizza l'elemento <probing>, il runtime interrompe il sondaggio appena trova un assembly che corrisponde al nome semplice dell'assembly a cui fa riferimento, anche se la corrispondenza non è corretta. Se è corretta, l'assembly verrà utilizzato; in caso contrario, la ricerca verrà interrotta e l'associazione non avrà luogo.

Individuazione dell'assembly mediante basi di codice

È possibile fornire le informazioni relative alla base di codice utilizzando l'elemento <codeBase> in un file di configurazione. La base di codice viene sempre controllata prima che il runtime esegua la ricerca dell'assembly a cui è stato fatto riferimento. Se un file dei criteri editore, contenente le informazioni per il reindirizzamento a una versione finale, contiene anche un elemento <codeBase>, verrà utilizzato tale elemento. Se, ad esempio, un elemento <codeBase> viene specificato nel file di configurazione dell'applicazione e anche in un file dei criteri editore che esegue l'override delle informazioni sull'applicazione, verrà utilizzato l'elemento <codeBase> presente nel file dei criteri editore.

Se nel percorso specificato dall'elemento <codeBase> non viene individuato alcun assembly, la richiesta di associazione non viene completata e non vengono eseguite ulteriori operazioni. Se viene individuato un assembly che soddisfa i criteri dell'assembly chiamante, verrà utilizzato l'assembly individuato. Quando viene caricato il file indicato dall'elemento <codeBase> specificato, il runtime controlla che il nome, la versione, le impostazioni cultura e la chiave pubblica corrispondano a quelle del riferimento dell'assembly chiamante.

Nota:

Gli assembly a cui viene fatto riferimento che sono esterni alla directory principale dell'applicazione devono avere nomi sicuri e devono essere installati nella Global Assembly Cache o devono essere specificati mediante l'elemento <codeBase>.

Individuazione dell'assembly mediante ricerca

Se nel file di configurazione dell'applicazione non è stato specificato alcun elemento <codeBase>, il runtime esegue la ricerca dell'assembly utilizzando quattro criteri:

  • La base applicativa, ovvero la directory principale nella quale viene eseguita l'applicazione.

  • Le impostazioni cultura, ovvero l'attributo relativo alle impostazioni cultura dell'assembly a cui viene fatto riferimento.

  • Il nome, ovvero il nome dell'assembly a cui viene fatto riferimento.

  • L'attributo privatePath dell'elemento <probing>, ovvero l'elenco definito dall'utente delle sottodirectory del percorso principale. È possibile specificare questo percorso nel file di configurazione dell'applicazione e nel codice gestito utilizzando la proprietà AppendPrivatePath per un dominio dell'applicazione. Se il percorso viene specificato nel codice gestito, il sondaggio viene eseguito prima nel percorso privatePath specificato nel codice gestito, quindi in quello specificato nel file di configurazione dell'applicazione.

Ricerca nella base applicativa e nelle directory delle impostazioni cultura

Il runtime esegue sempre la ricerca a partire dalla base applicativa, che può essere un URL o la directory principale dell'applicazione su un computer. Se l'assembly a cui viene fatto riferimento non viene individuato nella base applicativa e non viene fornita alcuna informazione relativa alle impostazioni cultura, il runtime ricerca il nome dell'assembly in tutte le sottodirectory. La ricerca viene eseguita nelle seguenti directory:

   [base applicazione] / [nome assembly].dll

   [base applicazione] / [nome assembly] / [nome assembly].dll

Se per l'assembly a cui viene fatto riferimento vengono specificate le informazioni relative alle impostazioni cultura, la ricerca viene eseguita solo nelle seguenti directory:

   [base applicazione] / [impostazioni cultura] / [nome assembly].dll

   [base applicazione] / [impostazioni cultura] / [nome assembly] / [nome assembly].dll

Sondaggio mediante l'attributo privatePath

Oltre alle sottodirectory relative alle impostazioni cultura e a quelle specificate per l'assembly a cui viene fatto riferimento, il runtime esegue il sondaggio nelle directory specificate dall'attributo privatePath dell'elemento <probing>. È necessario che queste siano sottodirectory della directory principale dell'applicazione. Le directory esaminate variano in base all'inclusione delle informazioni relative alle impostazioni cultura nella richiesta dell'assembly a cui viene fatto riferimento.

Il runtime interrompe la ricerca non appena trova un assembly che corrisponde al nome semplice dell'assembly a cui fa riferimento. La corrispondenza potrebbe anche non essere corretta. Se è corretta, l'assembly verrà utilizzato; in caso contrario, la ricerca verrà interrotta e l'associazione non avrà luogo.

Se le impostazioni cultura sono state incluse, vengono esaminate le seguenti directory:

   [base applicazione] / [binpath] / [impostazioni cultura] / [nome assembly].dll

   [base applicazione] / [binpath] / [impostazioni cultura] / [nome assembly] / [nome assembly].dll

Se le informazioni relative alle impostazioni cultura non sono state incluse, vengono esaminate le seguenti directory:

   [base applicazione] / [binpath] / [nome assembly].dll

   [base applicazione] / [binpath] / [nome assembly] / [nome assembly].dll

Esempi di sondaggio

Date le seguenti informazioni:

  • Nome dell'assembly a cui viene fatto riferimento: myAssembly

  • Directory radice dell'applicazione: http://www.code.microsoft.com

  • Elemento <probing> specificato nel file di configurazione: bin

  • Impostazioni cultura: de

Il runtime esegue la ricerca nei seguenti indirizzi URL:

http://www.code.microsoft.com/de/myAssembly.dll

http://www.code.microsoft.com/de/myAssembly/myAssembly.dll

http://www.code.microsoft.com/bin/de/myAssembly.dll

http://www.code.microsoft.com/bin/de/myAssembly/myAssembly.dll

Più assembly con lo stesso nome

Nell'esempio riportato di seguito viene illustrato come configurare più assembly con lo stesso nome.

   <dependentAssembly>
      <assemblyIdentity name="Server" publicKeyToken="c0305c36380ba429" /> 
         <codeBase version="1.0.0.0" href="v1/Server.dll"/>
         <codeBase version="2.0.0.0" href="v2/Server.dll"/>
   </dependentAssembly>

Altri percorsi esaminati

La posizione dell'assembly può essere determinata anche utilizzando il contesto dell'associazione corrente. Questa situazione spesso si verifica quando viene utilizzato il metodo Assembly.LoadFrom e negli scenari di interoperabilità COM. Se un assembly utilizza il metodo LoadFrom per fare riferimento a un altro assembly, il percorso dell'assembly chiamante viene utilizzato come suggerimento per l'individuazione del percorso dell'assembly a cui viene fatto riferimento. Se viene individuato un assembly che soddisfa la richiesta, il runtime lo carica, altrimenti continua la ricerca utilizzando le proprie regole semantiche e quindi richiedendo l'assembly a Windows Installer. Se non viene fornito alcun assembly che soddisfa la richiesta di associazione, viene generata l'eccezione TypeLoadException nel codice gestito, se è stato fatto riferimento a un tipo, oppure l'eccezione FileNotFoundException, se l'assembly caricato non è stato individuato.

Se, ad esempio, Assembly1 fa riferimento ad Assembly2 e Assembly1 è stato scaricato da http://www.code.microsoft.com/utils, questo URL viene utilizzato come suggerimento per l'individuazione di Assembly2.dll. Il runtime esegue la ricerca dell'assembly negli URL http://www.code.microsoft.com/utils/Assembly2.dll e http://www.code.microsoft.com/utils/Assembly2/Assembly2.dll. Se Assembly2 non viene individuato in nessuno dei due URL, il runtime invia una richiesta a Windows Installer.

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

Riferimenti di assembly parziali