Erstellen von Schattenkopien von Assemblys
Durch das Erstellen von Schattenkopien können Assemblys, die in einer Anwendungsdomäne verwendet werden, ohne Entladung der Anwendungsdomäne aktualisiert werden. Dies empfiehlt sich besonders für Anwendungen wie ASP.NET-Sites, die ständig verfügbar sein müssen.
Die Common Language Runtime sperrt eine Assemblydatei beim Laden der Assembly. Somit kann die Datei erst aktualisiert werden, wenn die Assembly entladen wurde. Die einzige Möglichkeit zum Entladen einer Assembly aus einer Anwendungsdomäne besteht darin, die Anwendungsdomäne zu entladen. Unter normalen Umständen kann eine Assembly also erst nach dem Entladen aller Anwendungsdomänen, die sie verwenden, auf dem Datenträger aktualisiert werden.
Wenn eine Anwendungsdomäne für das Erstellen von Schattenkopien von Dateien konfiguriert wird, werden die Assemblys aus dem Anwendungspfad an einen anderen Speicherort kopiert und von dort geladen. Die Kopie ist zwar gesperrt, doch die ursprüngliche Assemblydatei wird entsperrt und kann aktualisiert werden.
Wichtig |
---|
Es können nur Schattenkopien der Assemblys erstellt werden, die in dem bei der Konfiguration der Anwendungsdomäne durch die ApplicationBase-Eigenschaft und die PrivateBinPath-Eigenschaft festgelegten Anwendungsverzeichnis oder in dessen Unterverzeichnissen gespeichert sind.Von Assemblys, die im globalen Assemblycache gespeichert sind, werden keine Schattenkopien erstellt. |
Dieser Artikel enthält folgende Abschnitte:
Aktivieren und Verwenden von Schattenkopien beschreibt die grundlegende Verwendung der Schattenkopiefunktion und die dafür verfügbaren Optionen.
Startleistung beschreibt die Änderungen, die in .NET Framework, Version 4 zum Verbessern der Startleistung an der Schattenkopiefunktion vorgenommen wurden, und erläutert, wie das Verhalten früherer Versionen wiederhergestellt werden kann.
Veraltete Methoden beschreibt die Änderungen, die an den Eigenschaften und Methoden zum Steuern der Schattenkopiefunktion in .NET Framework 2.0 vorgenommen wurden.
Aktivieren und Verwenden von Schattenkopien
Mit den Eigenschaften der AppDomainSetup-Klasse können Sie wie folgt eine Anwendungsdomäne für das Erstellen von Schattenkopien konfigurieren:
Aktivieren Sie das Erstellen von Schattenkopien, indem Sie die ShadowCopyFiles-Eigenschaft auf den Zeichenfolgenwert "true" festlegen.
Durch diese Einstellung werden standardmäßig alle Assemblys im Anwendungspfad in den Downloadcache kopiert, bevor sie geladen werden. Dies ist derselbe Cache, der von der Common Language Runtime zum Speichern von Dateien verwaltet wird, die von anderen Computern heruntergeladen wurden. Die Common Language Runtime löscht die Dateien automatisch, wenn sie nicht mehr benötigt werden.
Legen Sie optional mit der CachePath-Eigenschaft und der ApplicationName-Eigenschaft einen benutzerdefinierten Speicherort für Schattenkopien von Dateien fest.
Zur Bildung des Basispfads für den Speicherort wird die ApplicationName-Eigenschaft mit der CachePath-Eigenschaft als Unterverzeichnis verkettet. Die Schattenkopien von Assemblys werden in Unterverzeichnissen dieses Pfads und nicht im Basispfad selbst erstellt.
Hinweis Wenn die ApplicationName-Eigenschaft nicht festgelegt ist, wird die CachePath-Eigenschaft ignoriert, und der Downloadcache wird verwendet.Es wird keine Ausnahme ausgelöst.
Wenn Sie einen benutzerdefinierten Speicherort angeben, müssen Sie selbst die Verzeichnisse und die kopierten Dateien bereinigen, wenn diese nicht mehr benötigt werden. Sie werden nicht automatisch gelöscht.
Es empfiehlt sich aus mehreren Gründen, einen benutzerdefinierten Speicherort für Schattenkopien von Dateien festzulegen. Sie können einen benutzerdefinierten Speicherort für Schattenkopien von Dateien festlegen, wenn die Anwendung viele Kopien generiert. Der Downloadcache ist aufgrund der Größe – nicht aufgrund der Lebensdauer – begrenzt. Daher ist es möglich, dass die Common Language Runtime versucht, eine noch verwendete Datei zu löschen. Ein weiterer Grund zum Festlegen eines benutzerdefinierten Speicherorts liegt vor, wenn die Benutzer, die die Anwendung ausführen, keinen Schreibzugriff auf den Verzeichnisspeicherort haben, den die Common Language Runtime für den Downloadcache verwendet.
Sie können optional mithilfe der ShadowCopyDirectories-Eigenschaft die Assemblys einschränken, von denen Schattenkopien erstellt werden.
Wenn Sie die Schattenkopiefunktion für eine Anwendungsdomäne aktivieren, werden standardmäßig alle Assemblys im Anwendungspfad kopiert, d. h. in den von der ApplicationBase-Eigenschaft und der PrivateBinPath-Eigenschaft angegebenen Verzeichnissen. Sie können den Kopiervorgang auf ausgewählte Verzeichnisse begrenzen. Erstellen Sie dazu eine Zeichenfolge, die nur die Verzeichnisse enthält, von denen Sie Schattenkopien erstellen möchten, und weisen Sie diese Zeichenfolge der ShadowCopyDirectories-Eigenschaft zu. Trennen Sie die Verzeichnisse durch Semikolons. Es werden nur Schattenkopien von den Assemblys erstellt, die sich in den ausgewählten Verzeichnissen befinden.
Wichtig Verzeichnispfade dürfen keine Semikolons enthalten, da das Semikolon das Trennzeichen ist.Es gibt kein Escapezeichen für Semikolons.
Startleistung
Beim Start einer Anwendungsdomäne mit aktivierter Schattenkopiefunktion erfolgt eine Verzögerung, während Assemblys im Anwendungsverzeichnis in das Schattenkopieverzeichnis kopiert werden bzw. überprüft wird, ob sie an diesem Speicherort bereits vorhanden sind. Vor .NET Framework 4 wurden alle Assemblys in ein temporäres Verzeichnis kopiert. Jede Assembly wurde geöffnet, um den Assemblynamen zu bestätigen, und der starke Name wurde überprüft. Für jede Assembly wurde überprüft, ob sie über ein neueres Aktualisierungsdatum verfügt als die Kopie im Schattenkopieverzeichnis. Wenn dies der Fall war, wurde sie in das Schattenkopieverzeichnis kopiert. Zum Schluss wurden die temporären Kopien verworfen.
Ab .NET Framework 4 werden beim Start standardmäßig die Datums- und Uhrzeitangaben jeder Assembly im Anwendungsverzeichnis direkt mit den Datums- und Uhrzeitangaben der Kopie im Schattenkopieverzeichnis verglichen. Wenn die Assembly aktualisiert wurde, wird sie wie in früheren Versionen des .NET Framework kopiert. Andernfalls wird die Kopie im Schattenkopieverzeichnis geladen.
Die dadurch erzielte Leistungsverbesserung ist bei Anwendungen am größten, bei denen sich Assemblys nicht häufig ändern und Änderungen normalerweise eine kleinen Teilmenge von Assemblys betreffen. Wenn sich der Großteil der Assemblys in einer Anwendung häufig ändert, kann die Leistung durch das neue Standardverhalten beeinträchtigt werden. Sie können das Startverhalten der früheren Versionen des .NET Framework wiederherstellen, indem Sie der Konfigurationsdatei das <shadowCopyVerifyByTimestamp>-Element mit dem Wert enabled="false" hinzufügen.
Veraltete Methoden
Die AppDomain-Klasse verfügt über mehrere Methoden mit denen das Erstellen von Schattenkopien in einer Anwendungsdomäne gesteuert werden kann, z. B. SetShadowCopyFiles und ClearShadowCopyPath. Diese Methoden sind jedoch in .NET Framework Version 2.0 als veraltet markiert. Es wird empfohlen, die Eigenschaften der AppDomainSetup-Klasse zu verwenden, um eine Anwendungsdomäne für das Erstellen von Schattenkopien zu konfigurieren.
Siehe auch
Referenz
AppDomainSetup.ShadowCopyFiles
AppDomainSetup.ApplicationName
AppDomainSetup.ShadowCopyDirectories