Reindirizzamento delle versioni di assembly
Aggiornamento: novembre 2007
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 .NET Framework Configuration (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 Global Assembly Cache 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 sicurezza. 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 .NET Framework Configuration (Mscorcfg.msc).
L'impostazione predefinita dell'attributo apply è yes. Impostando l'attributo apply su no, verrà eseguito l'override delle impostazioni yes precedenti. 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. In questo attributo facoltativo viene utilizzato un numero di versione di .NET Framework per indicare la versione a cui è applicabile. Se non si specifica l'attributo appliesTo, l'elemento <assemblyBinding> verrà applicato a tutte le versioni di .NET Framework.
L'attributo appliesTo è stato introdotto in .NET Framework versione 1.1 ed è ignorato in .NET Framework versione 1.0. Quando si utilizza .NET Framework versione 1.0, vengono quindi applicati tutti gli elementi <assemblyBinding>, anche se viene specificato un 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 dell'associazione di assembly per qualsiasi reindirizzamento di assembly .NET Framework in cui non viene utilizzato l'attributo appliesTo e che pertanto viene applicato a tutte le versioni di .NET Framework. In caso di conflitto nel reindirizzamento, verrà utilizzata la prima istruzione di reindirizzamento corrispondente nel 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
Attività
Procedura: creare criteri editore
Concetti
Come il runtime individua gli assembly
Riferimenti
Schema delle impostazioni dell'ambiente di esecuzione
Altre risorse
Assembly in Common Language Runtime
Programmazione con gli assembly