Erstellen von Schattenkopien von Assemblys

Aktualisiert: November 2007

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.

Wichtiger Hinweis:

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.

In der folgenden Liste wird beschrieben, wie eine Anwendungsdomäne mithilfe der Eigenschaften der AppDomainSetup-Klasse für das Erstellen von Schattenkopien konfiguriert wird.

  • Aktivieren Sie das Erstellen von Schattenkopien, indem Sie die ShadowCopyFiles-Eigenschaft auf den Zeichenfolgenwert "true" festlegen.

    Hierdurch 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 gedownloadet 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. Möglicherweise müssen Sie einen benutzerdefinierten Speicherort für Schattenkopien von Dateien festlegen, wenn Ihre Anwendung eine große Anzahl von 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 die Assemblys einschränken, von denen mithilfe der ShadowCopyDirectories-Eigenschaft Schattenkopien erstellt werden.

    Wenn Sie das Erstellen von Schattenkopien für eine Anwendungsdomäne aktivieren, werden standardmäßig alle Assemblys in den Anwendungspfad kopiert, d. h. in die von der ApplicationBase-Eigenschaft und der PrivateBinPath-Eigenschaft angegebenen Verzeichnisse. Sie können den Kopiervorgang auf ausgewählte Verzeichnisse begrenzen. Erstellen Sie dazu eine Zeichenfolge, die nur die Verzeichnisse enthält, in denen Sie Schattenkopien erstellen möchten. 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.

Veraltete Methoden

Die AppDomain-Klasse verfügt über mehrere Methoden, wie SetShadowCopyFiles und ClearShadowCopyPath, mit denen das Erstellen von Schattenkopien in einer Anwendungsdomäne gesteuert werden kann. Sie sind jedoch in .NET Framework, Version 2.0, als veraltet gekennzeichnet. 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.CachePath

AppDomainSetup.ApplicationName

AppDomainSetup.ShadowCopyDirectories