Unificazione degli assembly di .NET Framework
Poiché nell'esecuzione affiancata di diverse versioni è possibile che un'applicazione sia costituita da componenti generati tramite versioni diverse di .NET Framework, possono verificarsi conflitti tra le dipendenze dei componenti. Si supponga, ad esempio, che per il componente A, generato tramite .NET Framework versione 1.0, sia necessario utilizzare la versione 1.0 dell'assembly System.Data. Per il componente B, generato tramite .NET Framework versione 1.1, è necessario utilizzare la versione 1.1 dell'assembly System.Data. Se le versioni degli assembly, pur non essendo compatibili, vengono caricate contemporaneamente, potrebbero verificarsi eccezioni non previste di cast di tipo o problemi ancora più gravi.
Modalità di determinazione da parte dell'applicazione della versione di .NET da utilizzare
Per risolvere il problema, quando in un'applicazione vengono utilizzati componenti generati in versioni diverse di .NET Framework, la versione di runtime associata a un'applicazione determina la versione degli assembly di .NET Framework utilizzati dall'applicazione e da tutti i componenti. Nell'esempio precedente, se l'applicazione viene associata alla versione 1.1 di .NET Framework, la versione 1.1 dell'assembly System.Data viene caricata e condivisa tra tutti i componenti utilizzati dall'applicazione. Il riferimento del componente A alla versione 1.0 dell'assembly System.Data viene promosso in fase di esecuzione alla versione di riferimento 1.1.
È possibile eseguire l'override di questo comportamento aggiungendo elementi <bindingRedirect> ai file Machine.config o Web.config, per consentire a un'applicazione di utilizzare una versione di assembly aggiornata, progettata per sostituire un assembly esistente per determinati tipi di applicazioni. Se, ad esempio, in futuro verrà rilasciata una versione aggiornata di System.Web.Service.dll in grado di supportare la versione 1.2 di SOAP, sarà possibile utilizzare tale versione nell'applicazione, anziché la versione installata in origine con il runtime.
È possibile eseguire l'override anche di questo comportamento nel file di configurazione dell'host ASP.NET (Aspnet.config). In ASP.NET questo file viene utilizzato per assicurare che la versione di System.Web.dll e System.Web.RegularExpressions.dll corrisponda sempre alla versione di runtime associata a un'applicazione, indipendentemente dagli eventuali override nel file Web.config.
È anche possibile utilizzare un componente generato tramite una versione successiva di ASP.NET in un'applicazione generata con una versione precedente. Si ricordi che la versione dell'ISAPI ASPNET associata a un'applicazione determina sempre la versione del runtime utilizzata per un'applicazione. Se l'applicazione è configurata per l'utilizzo della versione precedente del runtime, il componente verrà automaticamente reindirizzato in fase di esecuzione per utilizzare anche tale versione. Quando si utilizza un componente generato con una versione successiva di .NET Framework in un'applicazione generata in una versione precedente, prendere in considerazione quanto segue:
- Assicurarsi che il componente non utilizzi alcuna funzionalità o dipenda da comportamenti specifici della versione successiva di .NET Framework, in quanto queste funzionalità potrebbero non essere disponibili nella versione precedente del runtime.
- ASP.NET utilizza le proprietà scriptmap in IIS per associare un'applicazione a una versione del runtime. Gli elementi di configurazione <supportedRuntime> e <requiredRuntime> non si applicano alle applicazioni ASP.NET.
In alternativa, se la versione di runtime utilizzata per generare i componenti è installata nel computer, è anche possibile riconfigurare l'applicazione per utilizzare la versione di runtime successiva. Poiché le versioni successive di .NET Framework sono progettate per mantenere la compatibilità con le versioni precedenti, l'applicazione dovrebbe funzionare senza bisogno di modifiche. Per informazioni sulla configurazione di un'applicazione ASP.NET per l'utilizzo di una versione specifica del runtime, vedere Configurazione di un'applicazione ASP.NET per una versione ASP.NET.
Vedere anche
Supporto dell'esecuzione affiancata di più versioni in ASP.NET | <bindingRedirect>