Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Annotazioni
Questo articolo è specifico di .NET Framework. Non si applica alle implementazioni più recenti di .NET, incluse .NET 6 e versioni successive.
La copia ombra consente di aggiornare gli assembly usati in un dominio applicativo senza scaricare il dominio applicativo. Ciò è particolarmente utile per le applicazioni che devono essere disponibili continuamente, ad esempio ASP.NET siti.
Importante
La copia ombra non è supportata nelle app del Windows Store di Windows 8.x.
Common Language Runtime blocca un file di assembly quando viene caricato l'assembly, quindi il file non può essere aggiornato fino a quando l'assembly non viene scaricato. L'unico modo per scaricare un assembly da un dominio applicazione consiste nello scaricamento del dominio applicazione, pertanto, in circostanze normali, non è possibile aggiornare un assembly su disco finché non vengono scaricati tutti i domini applicazione che lo usano.
Quando un dominio applicativo è configurato per copiare i file in modalità shadow, gli assembly dal percorso dell'applicazione vengono copiati in un altro percorso e caricati da lì. La copia è bloccata, ma il file di assembly originale è sbloccato e può essere aggiornato.
Importante
Gli unici assembly che possono essere copiati tramite ombreggiatura sono quelli archiviati nella directory dell'applicazione o nelle relative sottodirectory, specificate dalle proprietà ApplicationBase e PrivateBinPath quando il dominio applicativo è configurato. Gli assembly archiviati nella Global Assembly Cache non vengono copiati in shadow.
Questo articolo contiene le sezioni seguenti:
L'abilitazione e l'uso della copia ombra descrive l'uso di base e le opzioni disponibili per la copia ombra.
Prestazioni di avvio descrive le modifiche apportate alla copia ombra in .NET Framework 4 per migliorare le prestazioni di avvio e come ripristinare il comportamento delle versioni precedenti.
I metodi obsoleti descrivono le modifiche apportate alle proprietà e ai metodi che controllano la copia shadow in .NET Framework 2.0.
Abilitazione e utilizzo della copia di ombra
È possibile usare le proprietà della classe AppDomainSetup come indicato di seguito per configurare un dominio applicativo per la shadow copy.
Abilitare la copia ombra impostando la proprietà ShadowCopyFiles sul valore stringa
"true".Per impostazione predefinita, questa impostazione determina la copia di tutti gli assembly nel percorso dell'applicazione in una cache di download prima del caricamento. Si tratta della stessa cache gestita da Common Language Runtime per archiviare i file scaricati da altri computer e Common Language Runtime elimina automaticamente i file quando non sono più necessari.
È possibile impostare un percorso personalizzato per i file copiati in modalità shadow utilizzando le proprietà CachePath e ApplicationName.
Il percorso di base viene creato concatenando la proprietà ApplicationName alla proprietà CachePath nella forma di una sottodirectory. Gli assembly vengono copiati in sottodirectory di questo percorso, non nel percorso di base stesso.
Annotazioni
Se la ApplicationName proprietà non è impostata, la CachePath proprietà viene ignorata e viene utilizzata la cache di download. Non viene generata alcuna eccezione.
Se si specifica un percorso personalizzato, si è responsabili della pulizia delle directory e dei file copiati quando non sono più necessari. Non vengono eliminati automaticamente.
Esistono alcuni motivi per cui è consigliabile impostare un percorso personalizzato per i file delle copie shadow. Potrebbe essere necessario impostare un percorso personalizzato per i file copiati tramite ombreggiatura se l'applicazione genera un numero elevato di copie. La cache di download è limitata dalle dimensioni, non dalla durata, quindi è possibile che Common Language Runtime tenti di eliminare un file ancora in uso. Un altro motivo per impostare un percorso personalizzato è quando gli utenti che eseguono l'applicazione non hanno accesso in scrittura al percorso della directory usato da Common Language Runtime per la cache di download.
Opzionalmente, limitare gli assembly copiati in ombra usando la proprietà ShadowCopyDirectories.
Quando si abilita la copia shadow per un dominio applicativo, l'impostazione predefinita consiste nel copiare tutti gli assembly nel percorso dell'applicazione, ovvero nelle directory specificate dalle proprietà ApplicationBase e PrivateBinPath. È possibile limitare la copia alle directory selezionate creando una stringa contenente solo le directory da copiare in shadow e assegnando la stringa alla ShadowCopyDirectories proprietà . Separare le directory con punti e virgola. Solo gli assembly che vengono copiati automaticamente sono quelli nelle cartelle selezionate.
Annotazioni
Se non attribuisci una stringa alla proprietà ShadowCopyDirectories, o se imposti questa proprietà su
null, tutti gli assembly nelle directory specificate dalle proprietà ApplicationBase e PrivateBinPath vengono copiati in modalità shadow.Importante
I percorsi di directory non devono contenere punti e virgola, dato che il punto e virgola è il carattere separatore. Nessun carattere di escape per i punti e virgola.
Prestazioni di avvio
Quando viene avviato un dominio applicativo che usa la copia ombra, si verifica un ritardo mentre gli assembly nella directory dell'applicazione vengono copiati nella directory di copia ombra o vengono verificati se già presenti in tale posizione. Prima di .NET Framework 4, tutti gli assembly sono stati copiati in una directory temporanea. Ogni assembly è stato aperto per verificare il nome dell'assembly e il nome sicuro è stato convalidato. Ogni assembly è stato controllato per verificare se è stato aggiornato più di recente rispetto alla copia nella directory di copia shadow. In tal caso, è stato copiato nella directory della copia ombra. Infine, le copie temporanee sono state eliminate.
A partire dal .NET Framework 4, il comportamento di avvio predefinito consiste nel confronto diretto della data e dell'ora di ogni assembly nella directory dell'applicazione con la data e l'ora del file della copia nella directory di copia ombra. Se l'assembly è stato aggiornato, viene copiato usando la stessa procedura delle versioni precedenti di .NET Framework; in caso contrario, la copia nella directory di copia ombra viene caricata.
Il miglioramento delle prestazioni risultante è maggiore per le applicazioni in cui gli assembly non cambiano di frequente e le modifiche si verificano in genere in un piccolo subset di assembly. Se la maggior parte degli assembly in un'applicazione cambia spesso, il nuovo comportamento predefinito potrebbe causare una regressione delle 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 AppDomain classe include diversi metodi, ad esempio SetShadowCopyFiles e ClearShadowCopyPath, che possono essere usati per controllare la copia shadow in un dominio applicazione, ma sono stati contrassegnati come obsoleti in .NET Framework versione 2.0. Il modo consigliato per configurare un dominio dell'applicazione per la copia temporanea consiste nell'usare le proprietà della classe AppDomainSetup.