Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Hinweis
Dieser Artikel ist spezifisch für .NET Framework. Sie gilt nicht für neuere Implementierungen von .NET, einschließlich .NET 6 und höherer Versionen.
Das Schattenkopieren ermöglicht es, Assemblys, die in einer Anwendungsdomäne verwendet werden, zu aktualisieren, ohne die Anwendungsdomäne entladen zu müssen. Dies ist besonders nützlich für Anwendungen, die kontinuierlich verfügbar sein müssen, z. B. ASP.NET Websites.
Von Bedeutung
Schattenkopien werden in Windows 8.x Store-Apps nicht unterstützt.
Die Common Language Runtime sperrt eine Assemblydatei, wenn die Assembly geladen wird, sodass die Datei erst aktualisiert werden kann, wenn die Assembly entladen wird. Die einzige Möglichkeit zum Entladen einer Assembly aus einer Anwendungsdomäne besteht darin, die Anwendungsdomäne zu entladen, sodass eine Assembly unter normalen Umständen nicht auf dem Datenträger aktualisiert werden kann, bis alle Anwendungsdomänen, die sie verwenden, entladen wurden.
Wenn eine Anwendungsdomäne für das Schattenkopien von Dateien konfiguriert ist, werden Assemblys aus dem Anwendungspfad an einen anderen Speicherort kopiert und von diesem Speicherort geladen. Die Kopie ist gesperrt, aber die ursprüngliche Assemblydatei ist entsperrt und kann aktualisiert werden.
Von Bedeutung
Die einzigen Assemblys, die schattenkopiert werden können, sind diejenigen, die im Anwendungsverzeichnis oder dessen Unterverzeichnissen gespeichert sind und die durch die Eigenschaften ApplicationBase und PrivateBinPath angegeben werden, wenn die Anwendungsdomäne konfiguriert wird. Assemblys, die im globalen Assemblycache gespeichert sind, werden nicht schattenkopiert.
Dieser Artikel enthält die folgenden Abschnitte:
Das Aktivieren und Verwenden der Schattenkopie beschreibt die grundlegende Verwendung und die Optionen, die für die Schattenkopie verfügbar sind.
Startleistung beschreibt die Änderungen, die an der Schattenkopiefunktion in .NET Framework 4 vorgenommen werden, um die Startleistung zu verbessern. Außerdem wird erläutert, wie das Verhalten vorheriger Versionen wiederhergestellt werden kann.
Veraltete Methoden beschreiben die Änderungen, die an den Eigenschaften und Methoden vorgenommen wurden, die das Kopieren von Schatten in .NET Framework 2.0 steuern.
Aktivieren und Verwenden der Schattenkopiefunktion
Sie können die Eigenschaften der AppDomainSetup Klasse wie folgt verwenden, um eine Anwendungsdomäne für das Kopieren von Schatten zu konfigurieren:
Aktivieren Sie das Kopieren von Schatten, indem Sie die ShadowCopyFiles Eigenschaft auf den Zeichenfolgenwert
"true"
festlegen.Standardmäßig bewirkt diese Einstellung, dass alle Assemblys im Anwendungspfad vor dem Laden in einen Downloadcache kopiert werden. Dies ist derselbe Cache, der von der Common Language Runtime verwaltet wird, um Dateien zu speichern, die von anderen Computern heruntergeladen wurden, und die Common Language Runtime löscht die Dateien automatisch, wenn sie nicht mehr benötigt werden.
Legen Sie optional einen benutzerdefinierten Speicherort für schattenkopierte Dateien mithilfe der CachePath Eigenschaft und der ApplicationName Eigenschaft fest.
Der Basispfad für den Standort wird durch das Anhängen der ApplicationName-Eigenschaft an die CachePath-Eigenschaft als Unterverzeichnis gebildet. Schattenkopien von Assemblys werden in die Unterverzeichnisse dieses Pfades gesetzt und nicht in den Basispfad selbst.
Hinweis
Wenn die ApplicationName Eigenschaft nicht festgelegt ist, wird die CachePath Eigenschaft ignoriert und der Downloadcache verwendet. Es wird keine Ausnahme ausgelöst.
Wenn Sie einen benutzerdefinierten Speicherort angeben, sind Sie für das Bereinigen der Verzeichnisse und kopierten Dateien verantwortlich, wenn sie nicht mehr benötigt werden. Sie werden nicht automatisch gelöscht.
Es gibt einige Gründe, warum Sie einen benutzerdefinierten Speicherort für kopierte Schattendateien festlegen möchten. Möglicherweise möchten Sie einen benutzerdefinierten Speicherort für kopierte Schattendateien festlegen, wenn Ihre Anwendung eine große Anzahl von Kopien generiert. Der Downloadcache ist nach Größe begrenzt, nicht nach Lebensdauer, sodass die Common Language Runtime versucht, eine Datei zu löschen, die noch verwendet wird. Ein weiterer Grund zum Festlegen eines benutzerdefinierten Speicherorts ist, wenn Benutzer, die Ihre Anwendung ausführen, keinen Schreibzugriff auf den Verzeichnisspeicherort haben, den die Common Language Runtime für den Downloadcache verwendet.
Begrenzen Sie optional die Assemblys, von denen Schattenkopien erstellt werden, indem Sie die ShadowCopyDirectories-Eigenschaft verwenden.
Wenn Sie Schattenkopieren für eine Anwendungsdomäne aktivieren, besteht die Standardeinstellung darin, alle Assembly-Dateien im Anwendungspfad zu kopieren, d. h. in den Verzeichnissen, die durch die ApplicationBase und PrivateBinPath Eigenschaften angegeben werden. Sie können das Kopieren auf ausgewählte Verzeichnisse beschränken, indem Sie eine Zeichenfolge erstellen, die nur die Verzeichnisse enthält, die Sie schatten kopieren möchten, und die Zeichenfolge der ShadowCopyDirectories Eigenschaft zuweisen. Trennen Sie die Verzeichnisse durch Semikolons. Die einzigen Assemblys, von denen Schattenkopien erstellt werden, sind nun die in den ausgewählten Verzeichnissen.
Hinweis
Wenn Sie der ShadowCopyDirectories-Eigenschaft keine Zeichenfolge zuweisen oder diese Eigenschaft auf
null
festlegen, werden alle Assemblys in den Verzeichnissen, die durch die ApplicationBase- und PrivateBinPath-Eigenschaften angegeben sind, schattenkopiert.Von Bedeutung
Verzeichnispfade dürfen keine Semikolons enthalten, da das Semikolon das Trennzeichen ist. Es gibt kein Escapezeichen für Semikolons.
Startleistung
Wenn eine Anwendungsdomäne, die Schattenkopien verwendet, gestartet wird, gibt es eine Verzögerung, während Assemblys im Anwendungsverzeichnis in das Schattenkopieverzeichnis kopiert werden oder überprüft werden, ob sie sich bereits an diesem Speicherort befinden. Vor .NET Framework 4 wurden alle Assemblys in ein temporäres Verzeichnis kopiert. Jede Assembly wurde geöffnet, um den Assemblynamen zu überprüfen, und der starke Name wurde validiert. Jede Assembly wurde überprüft, um zu sehen, ob sie aktueller als die Kopie im Schattenkopieverzeichnis ist. Wenn das der Fall ist, wurde es in das Schattenkopieverzeichnis kopiert. Schließlich wurden die temporären Kopien verworfen.
Ab .NET Framework 4 besteht das Standardstartverhalten darin, das Dateidatum und die Uhrzeit der einzelnen Assemblys im Anwendungsverzeichnis direkt mit dem Dateidatum und der Uhrzeit der Kopie im Schattenkopieverzeichnis zu vergleichen. Wenn die Assembly aktualisiert wurde, wird sie mit demselben Verfahren wie in früheren Versionen von .NET Framework kopiert. andernfalls wird die Kopie im Schattenkopieverzeichnis geladen.
Die resultierende Leistungssteigerung ist am größten bei Anwendungen, bei denen Assemblies nicht häufig geändert werden und Änderungen normalerweise nur in einer kleinen Teilmenge der Assemblies auftreten. Wenn sich die Meisten Assemblys in einer Anwendung häufig ändern, kann das neue Standardverhalten zu einer Leistungsregression führen. Sie können das Startverhalten früherer Versionen von .NET Framework wiederherstellen, indem Sie der Konfigurationsdatei das <ShadowCopyVerifyByTimestamp-Element> hinzufügen.enabled="false"
Veraltete Methoden
Die AppDomain Klasse verfügt über mehrere Methoden, wie SetShadowCopyFiles und ClearShadowCopyPath, die zum Steuern der Schattenkopien in einer Anwendungsdomäne verwendet werden können, aber diese wurden in .NET Framework Version 2.0 als veraltet gekennzeichnet. Die empfohlene Methode zum Konfigurieren einer Anwendungsdomäne für das Kopieren von Schatten besteht darin, die Eigenschaften der AppDomainSetup Klasse zu verwenden.