Kopiowanie zestawów w tle

Kopiowanie w tle umożliwia aktualizowanie zestawów używanych w domenie aplikacji bez zwalniania domeny aplikacji. Jest to szczególnie przydatne w przypadku aplikacji, które muszą być stale dostępne, takie jak witryny ASP.NET.

Ważne

Kopiowanie w tle nie jest obsługiwane w aplikacjach ze Sklepu Windows 8.x.

Środowisko uruchomieniowe języka wspólnego blokuje plik zestawu podczas ładowania zestawu, więc nie można zaktualizować pliku do czasu zwolnienia zestawu. Jedynym sposobem zwolnienia zestawu z domeny aplikacji jest zwolnienie domeny aplikacji, więc w normalnych okolicznościach nie można zaktualizować zestawu na dysku do czasu zwolnienia wszystkich domen aplikacji, które z niej korzystają.

Gdy domena aplikacji jest skonfigurowana do kopiowania plików w tle, zestawy ze ścieżki aplikacji są kopiowane do innej lokalizacji i ładowane z tej lokalizacji. Kopia jest zablokowana, ale oryginalny plik zestawu jest odblokowany i można go zaktualizować.

Ważne

Jedynymi zestawami, które mogą być kopiowane w tle, są przechowywane w katalogu aplikacji lub jego podkatalogach określonych przez ApplicationBase właściwości i PrivateBinPath podczas konfigurowania domeny aplikacji. Zestawy przechowywane w globalnej pamięci podręcznej zestawów nie są kopiowane w tle.

Ten artykuł zawiera następujące sekcje:

  • Włączanie i używanie kopiowania w tle opisuje podstawowe użycie i opcje dostępne do kopiowania w tle.

  • Wydajność uruchamiania opisuje zmiany wprowadzone w kopii w tle w programie .NET Framework 4 w celu zwiększenia wydajności uruchamiania oraz sposobu przywracania zachowania wcześniejszych wersji.

  • Przestarzałe metody opisują zmiany wprowadzone we właściwościach i metodach sterujących kopiowaniem w tle w programie .NET Framework 2.0.

Włączanie i korzystanie z kopiowania w tle

Właściwości klasy można użyć AppDomainSetup w następujący sposób, aby skonfigurować domenę aplikacji na potrzeby kopiowania w tle:

  • Włącz kopiowanie w tle, ustawiając ShadowCopyFiles właściwość na wartość "true"ciągu .

    Domyślnie to ustawienie powoduje skopiowanie wszystkich zestawów w ścieżce aplikacji do pamięci podręcznej pobierania przed ich załadowaniem. Jest to ta sama pamięć podręczna przechowywana przez środowisko uruchomieniowe języka wspólnego do przechowywania plików pobranych z innych komputerów, a środowisko uruchomieniowe języka wspólnego automatycznie usuwa pliki, gdy nie są już potrzebne.

  • Opcjonalnie ustaw lokalizację niestandardową dla plików kopiowanych w tle przy użyciu CachePath właściwości i ApplicationName właściwości .

    Ścieżka podstawowa lokalizacji jest tworzona ApplicationName przez połączenie właściwości z właściwością CachePath jako podkatalogu. Zestawy są kopiowane w tle do podkatalogów tej ścieżki, a nie do samej ścieżki podstawowej.

    Uwaga

    ApplicationName Jeśli właściwość nie jest ustawiona, CachePath właściwość jest ignorowana i używana jest pamięć podręczna pobierania. Wyjątek nie jest zgłaszany.

    Jeśli określisz lokalizację niestandardową, odpowiadasz za czyszczenie katalogów i skopiowanych plików, gdy nie są już potrzebne. Nie są one usuwane automatycznie.

    Istnieje kilka powodów, dla których warto ustawić lokalizację niestandardową dla kopiowanych plików w tle. Możesz ustawić lokalizację niestandardową dla kopiowanych plików w tle, jeśli aplikacja generuje dużą liczbę kopii. Pamięć podręczna pobierania jest ograniczona przez rozmiar, a nie okres istnienia, więc możliwe, że środowisko uruchomieniowe języka wspólnego podejmie próbę usunięcia pliku, który jest nadal używany. Innym powodem ustawiania lokalizacji niestandardowej jest to, że użytkownicy, którzy uruchamiają aplikację, nie mają dostępu do zapisu do lokalizacji katalogu używanej przez środowisko uruchomieniowe języka wspólnego dla pamięci podręcznej pobierania.

  • Opcjonalnie ogranicz zestawy kopiowane w tle przy użyciu ShadowCopyDirectories właściwości .

    Po włączeniu kopiowania w tle dla domeny aplikacji ustawieniem domyślnym jest skopiowanie wszystkich zestawów w ścieżce aplikacji — czyli w katalogach określonych przez ApplicationBase właściwości i PrivateBinPath . Kopiowanie do wybranych katalogów można ograniczyć, tworząc ciąg zawierający tylko te katalogi, które chcesz skopiować w tle, i przypisując ciąg do ShadowCopyDirectories właściwości . Rozdziel katalogi średnikami. Jedynymi zestawami, które są kopiowane w tle, są te w wybranych katalogach.

    Uwaga

    Jeśli nie przypiszesz ciągu do ShadowCopyDirectories właściwości lub jeśli ustawisz tę właściwość na null, wszystkie zestawy w katalogach określonych przez ApplicationBase właściwości i PrivateBinPath zostaną skopiowane w tle.

    Ważne

    Ścieżki katalogów nie mogą zawierać średników, ponieważ średnik jest znakiem ogranicznika. Nie ma znaku ucieczki dla średników.

Startowa wydajność

Po uruchomieniu domeny aplikacji korzystającej z kopiowania w tle następuje opóźnienie podczas kopiowania zestawów w katalogu aplikacji do katalogu kopii w tle lub weryfikowania, czy znajdują się one już w tej lokalizacji. Przed programem .NET Framework 4 wszystkie zestawy zostały skopiowane do katalogu tymczasowego. Każdy zestaw został otwarty w celu zweryfikowania nazwy zestawu, a silna nazwa została zweryfikowana. Każdy zestaw został sprawdzony, czy został on zaktualizowany ostatnio niż kopia w katalogu kopii w tle. Jeśli tak, został skopiowany do katalogu kopii w tle. Na koniec kopie tymczasowe zostały odrzucone.

Począwszy od programu .NET Framework 4, domyślne zachowanie uruchamiania polega na bezpośrednim porównywaniu daty i godziny każdego zestawu w katalogu aplikacji z datą i godziną kopiowania plików w katalogu kopii w tle. Jeśli zestaw został zaktualizowany, jest kopiowany przy użyciu tej samej procedury co we wcześniejszych wersjach programu .NET Framework; w przeciwnym razie zostanie załadowana kopia w katalogu kopii w tle.

Wynikowa poprawa wydajności jest największa w przypadku aplikacji, w których zestawy nie zmieniają się często, a zmiany zwykle występują w małym podzestawie zestawów. Jeśli większość zestawów w aplikacji często się zmienia, nowe domyślne zachowanie może spowodować regresję wydajności. Możesz przywrócić zachowanie uruchamiania poprzednich wersji programu .NET Framework, dodając element shadowCopyVerifyByTimestamp> do pliku konfiguracji za pomocą polecenia enabled="false".<

Metody przestarzałe

Klasa AppDomain ma kilka metod, takich jak SetShadowCopyFiles i ClearShadowCopyPath, które mogą służyć do kontrolowania kopiowania w tle w domenie aplikacji, ale zostały one oznaczone jako przestarzałe w programie .NET Framework w wersji 2.0. Zalecanym sposobem skonfigurowania domeny aplikacji na potrzeby kopiowania w tle jest użycie właściwości AppDomainSetup klasy .

Zobacz też