Stínové kopírování sestavení
Poznámka:
Tento článek je specifický pro rozhraní .NET Framework. Nevztahuje se na novější implementace .NET, včetně .NET 6 a novějších verzí.
Stínová kopie umožňuje aktualizaci sestavení, která se používají v doméně aplikace bez uvolnění domény aplikace. To je zvlášť užitečné pro aplikace, které musí být nepřetržitě dostupné, například ASP.NET weby.
Důležité
Stínová kopie není podporována v aplikacích pro Windows 8.x Store.
Modul CLR (Common Language Runtime) uzamkne soubor sestavení při načtení sestavení, takže soubor nelze aktualizovat, dokud se sestavení nenačte. Jediným způsobem, jak uvolnit sestavení z domény aplikace, je uvolněním domény aplikace, takže za normálních okolností nelze sestavení aktualizovat na disku, dokud se nenačtou všechny domény aplikace, které ho používají.
Pokud je doména aplikace nakonfigurovaná na soubory stínové kopie, sestavení z cesty aplikace se zkopírují do jiného umístění a načtou se z daného umístění. Kopie je uzamčená, ale původní soubor sestavení je odemknutý a lze jej aktualizovat.
Důležité
Jediná sestavení, která mohou být stínově zkopírována, jsou uložená v adresáři aplikace nebo v jeho podadresářích určených vlastnostmi ApplicationBasePrivateBinPath při konfiguraci domény aplikace. Sestavení uložená v globální mezipaměti sestavení nejsou stínem zkopírována.
Tento článek obsahuje následující části:
Povolení a používání stínové kopie popisuje základní použití a možnosti, které jsou k dispozici pro stínové kopírování.
Výkon spouštění popisuje změny provedené ve stínové kopírování v rozhraní .NET Framework 4 za účelem zlepšení výkonu při spuštění a jak se vrátit k chování starších verzí.
Zastaralé metody popisují změny provedené ve vlastnostech a metodách, které řídí stínové kopírování v rozhraní .NET Framework 2.0.
Povolení a používání stínové kopie
Vlastnosti AppDomainSetup třídy můžete použít následujícím způsobem ke konfiguraci domény aplikace pro stínovou kopii:
Povolte stínové kopírování nastavením ShadowCopyFiles vlastnosti na hodnotu
"true"
řetězce .Ve výchozím nastavení toto nastavení způsobí, že se všechna sestavení v cestě aplikace zkopírují do mezipaměti pro stahování před jejich načtením. Jedná se o stejnou mezipaměť, kterou udržuje modul CLR (Common Language Runtime) pro ukládání souborů stažených z jiných počítačů, a modul CLR (Common Language Runtime) soubory automaticky odstraní, když už nejsou potřeba.
Volitelně můžete nastavit vlastní umístění stínových zkopírovaných souborů pomocí CachePath vlastnosti a ApplicationName vlastnosti.
Základní cesta pro umístění je vytvořena zřetězením ApplicationName vlastnosti do CachePath vlastnosti jako podadresáře. Sestavení jsou stínována do podadresářů této cesty, nikoli do samotné základní cesty.
Poznámka:
Pokud vlastnost ApplicationName není nastavená, CachePath vlastnost se ignoruje a použije se mezipaměť pro stahování. Žádná výjimka se nevyvolá.
Pokud zadáte vlastní umístění, zodpovídáte za vyčištění adresářů a zkopírování souborů, pokud už nejsou potřeba. Neodstraní se automaticky.
Existuje několik důvodů, proč můžete chtít pro stínové zkopírované soubory nastavit vlastní umístění. Pokud vaše aplikace vygeneruje velký počet kopií, může být vhodné nastavit vlastní umístění stínových zkopírovaných souborů. Mezipaměť pro stahování je omezená velikostí, nikoli životností, takže je možné, že se modul CLR (Common Language Runtime) pokusí odstranit soubor, který se stále používá. Dalším důvodem nastavení vlastního umístění je, že uživatelé, kteří používají vaši aplikaci, nemají přístup k zápisu do umístění adresáře, které common language runtime používá pro mezipaměť stahování.
Volitelně omezte sestavení, která jsou stínově zkopírována pomocí ShadowCopyDirectories vlastnosti.
Pokud povolíte stínové kopírování pro doménu aplikace, výchozí hodnota je kopírovat všechna sestavení v cestě aplikace – to znamená v adresářích určených vlastnostmi ApplicationBase a PrivateBinPath vlastnostmi. Kopírování na vybrané adresáře můžete omezit vytvořením řetězce, který obsahuje pouze ty adresáře, které chcete stínovou kopii, a přiřazením řetězce k ShadowCopyDirectories vlastnosti. Oddělte adresáře středníky. Jediná sestavení, která jsou stínována, jsou ta, která jsou ve vybraných adresářích.
Poznámka:
Pokud k vlastnosti nepřiřazujete řetězec ShadowCopyDirectories nebo pokud tuto vlastnost nastavíte na
null
, budou všechna sestavení v adresářích určených vlastnostmi ApplicationBasePrivateBinPath stínově zkopírována.Důležité
Cesty adresářů nesmí obsahovat středníky, protože středník je znak oddělovače. Pro středníky neexistuje žádný řídicí znak.
Výkon spouštění
Když se spustí doména aplikace, která používá stínové kopírování, dojde ke zpoždění, když se sestavení v adresáři aplikace zkopírují do adresáře stínové kopie nebo ověří, jestli už jsou v daném umístění. Před rozhraním .NET Framework 4 se všechna sestavení zkopírovala do dočasného adresáře. Každé sestavení bylo otevřeno k ověření názvu sestavení a byl ověřen silný název. Každé sestavení bylo zkontrolováno, zda bylo aktualizováno v poslední době než kopie v adresáři stínové kopie. Pokud ano, zkopíruje se do adresáře stínové kopie. Nakonec se dočasné kopie zahodily.
Počínaje rozhraním .NET Framework 4 je výchozím chováním při spuštění přímo porovnat datum a čas každého sestavení v adresáři aplikace s datem a časem kopie v adresáři stínové kopie. Pokud bylo sestavení aktualizováno, zkopíruje se stejným postupem jako v dřívějších verzích rozhraní .NET Framework; v opačném případě se načte kopie v adresáři stínové kopie.
Výsledné zlepšení výkonu je největší pro aplikace, ve kterých se sestavení často nemění a změny se obvykle vyskytují v malé podmnožině sestavení. Pokud se většina sestavení v aplikaci často mění, může nové výchozí chování způsobit regresi výkonu. Chování při spuštění předchozích verzí rozhraní .NET Framework můžete obnovit přidáním <elementu shadowCopyVerifyByTimestamp> do konfiguračního souboru pomocí enabled="false"
.
Zastaralé metody
Třída AppDomain má několik metod, například SetShadowCopyFiles a ClearShadowCopyPath, které lze použít k řízení stínové kopírování v doméně aplikace, ale tyto metody byly označeny zastaralé v rozhraní .NET Framework verze 2.0. Doporučeným způsobem konfigurace domény aplikace pro stínovou kopii je použití vlastností AppDomainSetup třídy.