Dela via


Skuggkopieringssammansättningar

Anmärkning

Den här artikeln är specifik för .NET Framework. Det gäller inte för nyare implementeringar av .NET, inklusive .NET 6 och senare versioner.

Skuggkopiering gör att sammansättningar som används i en programdomän kan uppdateras utan att programdomänen tas bort. Detta är särskilt användbart för program som måste vara tillgängliga kontinuerligt, till exempel ASP.NET platser.

Viktigt!

Skuggkopiering stöds inte i Windows 8.x Store-appar.

Common Language Runtime låser en sammansättningsfil när sammansättningen läses in, så filen kan inte uppdateras förrän sammansättningen har avlastats. Det enda sättet att ta bort en sammansättning från en programdomän är genom att ta bort programdomänen, så under normala omständigheter kan en sammansättning inte uppdateras på disk förrän alla programdomäner som använder den har tagits bort.

När en programdomän har konfigurerats för skuggkopieringsfiler kopieras sammansättningar från programsökvägen till en annan plats och läses in från den platsen. Kopian är låst, men den ursprungliga sammansättningsfilen är olåst och kan uppdateras.

Viktigt!

De enda sammansättningar som kan skuggkopieras är de som lagras i programkatalogen eller dess underkataloger, som anges av ApplicationBase egenskaperna och PrivateBinPath när programdomänen konfigureras. Assemblyfiler som lagras i den globala sammansättningscachen skuggkopieras inte.

Den här artikeln innehåller följande avsnitt:

  • Aktivering och användning av skuggkopiering beskriver den grundläggande användningen och de alternativ som är tillgängliga för skuggkopiering.

  • Startprestanda beskriver de ändringar som görs i skuggkopiering i .NET Framework 4 för att förbättra startprestanda och hur du återgår till beteendet för tidigare versioner.

  • Föråldrade metoder beskriver de ändringar som gjorts i de egenskaper och metoder som styr skuggkopiering i .NET Framework 2.0.

Aktivering och användning av skuggkopiering

Du kan använda egenskaperna för AppDomainSetup klassen enligt följande för att konfigurera en programdomän för skuggkopiering:

  • Aktivera skuggkopiering genom att ange ShadowCopyFiles egenskapen till strängvärdet "true".

    Som standard gör den här inställningen att alla sammansättningar i programsökvägen kopieras till en nedladdningscache innan de läses in. Det här är samma cache som underhålls av den vanliga språkkörningen för att lagra filer som laddats ned från andra datorer, och den vanliga språkkörningen tar automatiskt bort filerna när de inte längre behövs.

  • Du kan valfritt ange en anpassad plats för skuggkopierade filer genom att använda egenskapen CachePath och egenskapen ApplicationName.

    Bassökvägen för platsen skapas genom att sammanlänka ApplicationName egenskapen till CachePath egenskapen som en underkatalog. Sammansättningar är skuggkopierade till underkataloger av den här sökvägen, inte till bassökvägen själv.

    Anmärkning

    Om egenskapen ApplicationName inte har angetts CachePath ignoreras egenskapen och nedladdningscachen används. Inget undantag kastas.

    Om du anger en anpassad plats ansvarar du för att rensa katalogerna och kopiera filer när de inte längre behövs. De tas inte bort automatiskt.

    Det finns några orsaker till varför du kanske vill ange en anpassad plats för skuggkopierade filer. Du kanske vill ange en anpassad plats för skuggkopior av filer om programmet genererar ett stort antal kopior. Nedladdningscachen begränsas av storlek, inte efter livslängd, så det är möjligt att den vanliga språkkörningen försöker ta bort en fil som fortfarande används. En annan anledning till att ange en anpassad plats är när användare som kör ditt program inte har skrivåtkomst till den katalogplats som den vanliga språkkörningen använder för nedladdningscacheminnet.

  • Du kan valfritt begränsa de assembly-filer som skuggkopieras genom att använda egenskapen ShadowCopyDirectories.

    När du aktiverar skuggkopiering för en programdomän är standardinställningen att kopiera alla assembly i programsökvägen, det vill säga i de kataloger som anges av egenskaperna ApplicationBase och PrivateBinPath. Du kan begränsa kopieringen till valda kataloger genom att skapa en sträng som endast innehåller de kataloger som du vill skuggkopiera och tilldela strängen ShadowCopyDirectories till egenskapen. Avgränsa katalogerna med semikolon. De enda sammansättningar som är skuggkopierade är de som finns i de valda katalogerna.

    Anmärkning

    Om du inte tilldelar en sträng till egenskapen ShadowCopyDirectories, eller om du anger den här egenskapen till null, skuggkopieras alla sammansättningar i de kataloger som anges av egenskaperna ApplicationBase och PrivateBinPath.

    Viktigt!

    Katalogsökvägar får inte innehålla semikolon eftersom semikolonet är avgränsartecknet. Det finns inget escape-tecken för semikolon.

Uppstartsprestanda

När en programdomän som använder skuggkopiering startar uppstår en fördröjning medan sammansättningar i programkatalogen kopieras till katalogen för skuggkopiering eller verifieras om de redan finns på den platsen. Före .NET Framework 4 kopierades alla sammansättningar till en tillfällig katalog. Varje samling öppnades för att kontrollera samlingsnamnet, och det starka namnet verifierades. Varje komponent kontrollerades för att kontrollera om den hade uppdaterats mer nyligen än kopian i skuggkopieringskatalogen. I så fall kopierades den till katalogen för skuggkopiering. Slutligen togs de tillfälliga kopiorna bort.

Från och med .NET Framework 4 är standardbeteendet för start att direkt jämföra fildatum och tid för varje sammansättning i programkatalogen med fildatum och tid för kopian i katalogen för skuggkopiering. Om sammansättningen har uppdaterats kopieras den med samma procedur som i tidigare versioner av .NET Framework. Annars läses kopian i katalogen skuggkopia in.

Den resulterande prestandaförbättringen är störst för program där sammansättningar inte ändras ofta och ändringar vanligtvis sker i en liten delmängd av sammansättningar. Om en majoritet av sammansättningarna i ett program ändras ofta kan det nya standardbeteendet orsaka en prestandaregression. Du kan återställa startbeteendet för tidigare versioner av .NET Framework genom att lägga till elementet<shadowCopyVerifyByTimestamp> i konfigurationsfilen med enabled="false".

Föråldrade metoder

Klassen AppDomain har flera metoder, till exempel SetShadowCopyFiles och ClearShadowCopyPath, som kan användas för att styra skuggkopiering på en programdomän, men dessa har markerats som föråldrade i .NET Framework version 2.0. Det rekommenderade sättet att konfigurera en programdomän för skuggkopiering är att använda klassens AppDomainSetup egenskaper.

Se även