Reindirizzamento delle versioni di assembly

Quando si genera un'applicazione .NET Framework utilizzando una versione specifica di un assembly con nome sicuro, tale versione viene utilizzata dall'applicazione in fase di esecuzione. Talvolta, è tuttavia possibile utilizzare una versione più recente per eseguire l'applicazione. Per reindirizzare una versione di un assembly a un'altra, è possibile utilizzare un file di configurazione dell'applicazione, del computer o dei criteri editore. Per ulteriori informazioni sulle modalità di utilizzo di questi file da parte di Common Language Runtime per determinare la versione di assembly da utilizzare, vedere Modalità di individuazione di assembly del runtime. È possibile utilizzare lo Strumento di configurazione di .NET Framework (Mscorcfg.msc) per reindirizzare le versioni di assembly a entrambi i livelli di applicazione e computer oppure modificare direttamente il file di configurazione.

Nota   Non è possibile reindirizzare le versioni di assembly senza nome sicuro. Queste versioni vengono infatti ignorate da Common Language Runtime.

Reindirizzamento delle versioni di assembly mediante i criteri editore

È possibile che i fornitori di assembly consiglino l'utilizzo di una versione più recente di un assembly per l'esecuzione delle applicazioni fornendo un file dei criteri editore con l'assembly aggiornato. Il file dei criteri editore si trova nella cache dell'assembly globale e contiene le impostazioni per il reindirizzamento degli assembly.

Ogni versione principale.secondaria di un assembly è dotata del relativo file dei criteri editore. Le impostazioni di reindirizzamento dalla versione 1.1.2.222 alla 1.1.3.000 e dalla 1.1.2.321 alla 1.1.3.000 sono ad esempio contenute nello stesso file, mentre le impostazioni di reindirizzamento dalla versione 2.0.0.999 alla versione 3.0.0.000 sono contenute in un file diverso.

Se è disponibile un file dei criteri editore, il runtime controlla tale file dopo aver controllato il file di configurazione dell'applicazione e il manifesto dell'assembly. I fornitori utilizzano i criteri editori solo se il nuovo assembly è compatibile con la versione precedente dell'assembly reindirizzato.

È possibile ignorare i criteri editore specificando le impostazioni nel file di configurazione dell'applicazione.

Esclusione dei criteri editore

Le nuove versioni di assembly, che dovrebbero essere compatibili con le versioni precedenti, possono interrompere l'esecuzione di un'applicazione. In tal caso, è possibile utilizzare nel file di configurazione dell'applicazione l'impostazione riportata di seguito in modo che il runtime ignori i criteri editore.

<publisherPolicy apply="no">

Ignorare quindi i criteri editore per garantire agli utenti il corretto funzionamento dell'applicazione, ma assicurarsi di notificare il problema al fornitore dell'assembly. Una volta impostato un criterio editore per un assembly, il fornitore deve assicurare la compatibilità dell'assembly con le versioni precedenti e garantire ai clienti il corretto funzionamento della nuova versione.

Reindirizzamento delle versioni di assembly a livello di applicazione

Si supponga che il fornitore rilasci una nuova versione di un assembly utilizzato dall'applicazione, ma che non fornisca un criterio editore poiché non desidera garantirne la compatibilità con la versione originale precedente. È possibile impostare l'applicazione in modo da utilizzare la nuova versione dell'assembly inserendo informazioni di associazione di assembly nel file di configurazione dell'applicazione.

Reindirizzamento delle versioni di assembly a livello di computer

Talvolta è possibile che l'amministratore del sistema desideri impostare tutte le applicazioni installate su un computer affinché utilizzino una determinata versione di un assembly. Questo tipo di impostazione può essere ad esempio utilizzata per risolvere un problema di protezione. Se un assembly viene reindirizzato in un file di configurazione di un computer, tutte le applicazioni che utilizzano la versione precedente utilizzeranno la nuova versione. Il file di configurazione del computer esegue l'override del file di configurazione dell'applicazione e dei criteri editore.

Specifica dell'associazione di assembly nei file di configurazione

I file di configurazione dell'applicazione, del computer e dei criteri editore utilizzano lo stesso schema XML per elaborare le impostazioni di reindirizzamento degli assembly.

Associazione di assembly

Specificare le informazioni relative a un assembly aggiungendole in un elemento <dependentAssembly>. L'elemento <assemblyIdentity> contiene le informazioni per l'identificazione di un assembly. È possibile inserire più di un elemento <dependentAssembly> nel file di configurazione, ma è necessario che ogni elemento <dependentAssembly> contenga un solo elemento <assemblyIdentity>.

Per associare un assembly, è necessario specificare la stringa "urn:schemas-microsoft-com:asm.v1" con l'attributo xmlns nel tag <assemblyBinding>.

Specifica dei criteri editore

Per fare in modo che il runtime ignori i criteri editore relativi a un determinato assembly, è necessario inserire l'elemento <publisherPolicy> nell'elemento <dependentAssembly>. Per estendere questa funzionalità a tutti gli assembly utilizzati dall'applicazione, è necessario inserire questa impostazione nell'elemento <assemblyBinding>. Per ignorare i criteri editore, è possibile utilizzare anche lo Strumento di configurazione di .NET Framework (Mscorcfg.msc).

L'impostazione predefinita dell'attributo apply è yes. Se l'attributo apply viene impostato su no, tutte le impostazioni yes precedenti verranno ignorate. Se ad esempio apply viene impostato su no a livello dell'applicazione, qualsiasi impostazione di apply specifica di un assembly verrà ignorata anche se il valore dichiarato è yes. Pertanto, no è l'unica impostazioni utile, poiché consente di modificare le impostazioni predefinite.

Reindirizzamento delle versioni di assembly

Per reindirizzare una versione, utilizzare l'elemento <bindingRedirect>. L'attributo oldVersion può specificare una singola versione oppure un insieme di versioni. Se si imposta <bindingRedirect oldVersion="1.1.0.0-1.2.0.0" newVersion="2.0.0.0"/>, ad esempio, il runtime utilizzerà la versione 2.0.0.0 anziché una versione di assembly compresa tra 1.1.0.0 e 1.2.0.0.

Esempio

Nell'esempio che segue viene illustrato come reindirizzare una versione di myAssembly e disattivare il criterio editore per mySecondAssembly.

<configuration>
   <runtime>
      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
       <dependentAssembly>
         <assemblyIdentity name="myAssembly"
                           publicKeyToken="32ab4ba45e0a69a1"
                           culture="en-us" />
         <!-- Assembly versions can be redirected in application, publisher policy, or machine configuration files. -->
         <bindingRedirect oldVersion="1.0.0.0"
                          newVersion="2.0.0.0"/>
       </dependentAssembly>
       <dependentAssembly>
         <assemblyIdentity name="mySecondAssembly"
                           publicKeyToken="32ab4ba45e0a69a1"
                           culture="en-us" />
          <!-- Publisher policy can be set only in the application configuration file. -->
          <publisherPolicy apply="no">
       </dependentAssembly>
      </assemblyBinding>
   </runtime>
</configuration>

Reindirizzamento dell'associazione di assembly a .NET Framework

È possibile reindirizzare i riferimenti di associazione assembly a una specifica versione di .NET Framework utilizzando l'attributo appliesTo nell'elemento <assemblyBinding> nel file di configurazione di un'applicazione. Con tale attributo facoltativo si specifica un numero di versione di .NET Framework per indicare a quale versione viene applicato. Se non si specifica un attributo appliesTo, l'elemento <assemblyBinding> verrà applicato a tutte le versioni di .NET Framework.

L'attributo appliesTo è stato introdotto con .NET Framework versione 1.1, mentre viene ignorato in .NET Framework versione 1.0. Quando si utilizza .NET Framework versione 1.0, avranno pertanto effetto tutti gli elementi <assemblyBinding>, anche se si utilizza l'attributo appliesTo.

Per reindirizzare, ad esempio, l'associazione assembly per l'assembly Regcode di .NET Framework versione 1.0, occorrerà includere il codice XML che segue nel file di configurazione dell'applicazione.

<runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1" appliesTo="v1.0.3705">
            <dependentAssembly> 
               * assembly information goes here *
            </dependentAssembly>
       </assemblyBinding>
</runtime>

Gli elementi <assemblyBinding> vengono elaborati nell'ordine. È necessario immettere prima le informazioni di reindirizzamento di associazione assembly per gli assembly di .NET Framework versione 1.0, poi le informazioni di reindirizzamento di associazione assembly per gli assembly di .NET Framework versione 1.1. Immettere infine le informazioni di reindirizzamento di associazione assembly per i reindirizzamenti di assembly di .NET Framework che non utilizzano l'attributo appliesTo e riguardano pertanto tutte le versioni di .NET Framework. Nel caso in cui il reindirizzamento comporti un conflitto, viene adottata la prima istruzione di reindirizzamento valida del file di configurazione.

Per reindirizzare, ad esempio, un riferimento a un assembly di .NET Framework versione 1.0 e un altro riferimento a un assembly di .NET Framework versione 1.1, si potrà utilizzare il modello illustrato nel frammento di codice che segue.

<assemblyBinding xmlns="..." appliesTo="v1.0.3705"> 
   <! — .NET Framework version 1.0 redirects here --> 
</assemblyBinding> 

<assemblyBinding xmlns="..." appliesTo="v1.1.5000"> 
    <! — .NET Framework version 1.1 redirects here --> 
</assemblyBinding> 

<assemblyBinding xmlns="..."> 
    <!-- redirects meant for all versions of the runtime --> 
</assemblyBinding>

Vedere anche

Assembly | Programmazione con assembly | Come il runtime individua gli assembly | File di configurazione | Configurazione di applicazioni | Schema delle impostazioni del runtime | Schema dei file di configurazione