Dela via


Skuggkopieringssammansättningar

Kommentar

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.

Den vanliga språkkörningen låser en sammansättningsfil när sammansättningen läses in, så filen kan inte uppdateras förrän sammansättningen har inaktiverats. 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. Sammansättningar som lagras i den globala sammansättningscachen kopieras inte i skugga.

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.

Aktivera och använda 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 också ange en anpassad plats för skuggkopierade filer med hjälp CachePath av egenskapen 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 skugga kopierade till underkataloger för den här sökvägen, inte till själva bassökvägen.

    Kommentar

    Om egenskapen ApplicationName inte har angetts CachePath ignoreras egenskapen och nedladdningscachen används. Det utlöses inget undantag.

    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 också begränsa de sammansättningar som är skuggkopior med hjälp ShadowCopyDirectories av egenskapen .

    När du aktiverar skuggkopiering för en programdomän är standardinställningen att kopiera alla sammansättningar i programsökvägen , det vill sa i de kataloger som anges av ApplicationBase egenskaperna 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.

    Kommentar

    Om du inte tilldelar en sträng till ShadowCopyDirectories egenskapen, eller om du anger den här egenskapen till null, kopieras alla sammansättningar i de kataloger som anges av ApplicationBase egenskaperna 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.

Startprestanda

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 sammansättning öppnades för att verifiera sammansättningsnamnet och det starka namnet verifierades. Varje sammansättning kontrollerades för att se om den hade uppdaterats på senare tid än kopian i katalogen för skuggkopiering. 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