Creazione di copie replicate di assembly

La creazione di copie shadow consente di aggiornare gli assembly utilizzati in un dominio dell'applicazione senza scaricare il dominio stesso. Questa funzionalità si rivela particolarmente utile per applicazioni che devono essere continuamente disponibili, ad esempio i siti ASP.NET.

Quando viene caricato un assembly, il file dell'assembly viene bloccato da Common Language Runtime in modo che non sia possibile aggiornarlo finché l'assembly non viene scaricato. Poiché l'unico modo per scaricare un assembly da un dominio applicazione consiste nello scaricare il dominio applicazione, in circostanze normali un assembly non può essere aggiornato su disco finché non sono stati scaricati tutti i domini applicazione da cui viene utilizzato.

Quando un dominio applicazione viene configurato per la creazione di copie replicate dei file, gli assembly del percorso dell'applicazione vengono copiati in un altro percorso e caricati da tale percorso. La copia è bloccata, ma il file di assembly originale è sbloccato e può essere aggiornato.

Nota importanteImportante

Gli unici assembly per i quali è possibile creare copie replicate sono quelli archiviati nella directory dell'applicazione o nelle relative sottodirectory, secondo quanto specificato dalle proprietà ApplicationBase e PrivateBinPath durante la configurazione del dominio applicazione.Non è possibile creare copie replicate degli assembly archiviati nella Global Assembly Cache.

In questo articolo sono incluse le sezioni seguenti:

  • In Abilitazione e utilizzo della copia shadow vengono descritti l'utilizzo di base e le opzioni disponibili per la copia shadow.

  • In Prestazioni di avvio vengono descritte le modifiche apportate alla copia shadow in .NET Framework versione 4 per migliorare le prestazioni di avvio e il ripristino del comportamento di versioni precedenti.

  • In Metodi obsoleti vengono descritte le modifiche apportate alle proprietà e ai metodi che controllano la copia shadow in .NET Framework 2.0. 

Abilitazione e utilizzo della copia shadow

È possibile utilizzare le proprietà della classe AppDomainSetup come segue per configurare un dominio applicazione per la copia shadow:

  • Attivare la creazione di copie replicate impostando la proprietà ShadowCopyFiles sul valore stringa "true".

    Per impostazione predefinita, con questa impostazione tutti gli assembly del percorso dell'applicazione vengono copiati in una Download Cache prima del caricamento. Questa è la stessa cache gestita da Common Language Runtime per archiviare i file scaricati da altri computer. Common Language Runtime elimina automaticamente i file quando non sono più necessari.

  • Facoltativamente, impostare un percorso personalizzato per i file di cui è stata creata una copia shadow utilizzando le proprietà CachePath e ApplicationName.

    Il percorso di base viene formato concatenando la proprietà ApplicationName con la proprietà CachePath come sottodirectory. Le copie replicate degli assembly vengono inserite nelle sottodirectory di questo percorso e non nel percorso di base stesso.

    NotaNota

    Se la proprietà ApplicationName non è impostata, la proprietà CachePath viene ignorata e viene utilizzata la Download Cache.Non viene generata alcuna eccezione.

    Se si specifica un percorso personalizzato, sarà necessario provvedere manualmente alla pulizia delle directory e all'eliminazione dei file copiati non più necessari. Questi infatti non vengono eliminati automaticamente.

    Vi sono diversi motivi per cui impostare un percorso personalizzato per i file di copia shadow, ad esempio se l'applicazione genera un numero elevato di copie. La Download Cache è limitata per dimensione e non per durata, pertanto può accadere che Common Language Runtime tenti di eliminare un file ancora in uso. È opportuno impostare un percorso personalizzato anche nei casi in cui gli utenti che eseguono l'applicazione non dispongono dell'accesso in scrittura al percorso di directory utilizzato da Common Language Runtime per la Download Cache.

  • Facoltativamente, è possibile limitare gli assembly di cui viene creata la copia shadow utilizzando la proprietà ShadowCopyDirectories.

    Se si abilita la funzionalità di copia shadow per un dominio applicazione, per impostazione predefinita tutti gli assembly vengono copiati nel percorso dell'applicazione, ovvero nelle directory specificate dalle proprietà ApplicationBase e PrivateBinPath. È possibile limitare la copia alle directory selezionate creando una stringa che contiene solo le directory di cui si desidera creare la copia shadow e assegnando la stringa alla proprietà ShadowCopyDirectories. Separare le directory con punti e virgola. Verrà creata la copia replicata solo degli assembly contenuti nelle directory selezionate.

    Nota importanteImportante

    I percorsi di directory non devono contenere punti e virgola, in quanto il punto e virgola è il carattere del delimitatore.Non sono disponibili caratteri di escape per i punti e virgola.

Prestazioni di avvio

Quando viene avviato un dominio applicazione che utilizza la copia shadow, si verifica un ritardo mentre gli assembly nella directory dell'applicazione vengono copiati nella directory della copia shadow o se viene verificata la loro presenza in tale percorso. Nelle versioni precedenti .NET Framework 4, tutti gli assembly vengono copiati in una directory temporanea. Ogni assembly viene aperto per verificare il nome dell'assembly e il nome sicuro viene convalidato. Ogni assembly viene controllato per vedere se è stato aggiornato più recentemente della copia nella directory della copia shadow. In tal caso, viene copiato nella directory della copia shadow. Infine, le copie temporanee vengono rimosse.

A partire da .NET Framework 4, il comportamento di avvio predefinito serve per confrontare direttamente la data e l'ora del file di ciascun assembly nella directory dell'applicazione con la data e l'ora del file della copia nella directory della copia shadow. Se l'assembly è stato aggiornato, viene copiato tramite la stessa procedura delle versioni precedenti di .NET Framework; in caso contrario, viene caricata la copia nella directory della copia shadow.

Il miglioramento delle prestazioni risultante è maggiore per le applicazioni in cui gli assembly non vengono modificati frequentemente e le modifiche di solito vengono apportate in un piccolo subset di assembly. Se la maggior parte degli assembly in un'applicazione vengono modificati frequentemente, il nuovo comportamento predefinito potrebbe provocare problemi di prestazioni. È possibile ripristinare il comportamento di avvio delle versioni precedenti di .NET Framework aggiungendo l'elemento <shadowCopyVerifyByTimestamp> al file di configurazione, con enabled="false".

Metodi obsoleti

La classe AppDomain dispone di molti metodi, ad esempio SetShadowCopyFiles e ClearShadowCopyPath, che possono essere utilizzati per controllare la copia shadow in un dominio applicazione. Questi metodi tuttavia sono stati contrassegnati come obsoleti in .NET Framework versione 2.0. Per configurare un dominio applicazione per le copie replicate è consigliabile utilizzare le proprietà della classe AppDomainSetup.

Vedere anche

Riferimenti

AppDomainSetup.ShadowCopyFiles

AppDomainSetup.CachePath

AppDomainSetup.ApplicationName

AppDomainSetup.ShadowCopyDirectories

Altre risorse

Elemento <shadowCopyVerifyByTimestamp>