Sdílet prostřednictvím


Sestavení pro vytváření stínových kopií

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í, když se sestavení načte, takže soubor nelze aktualizovat, dokud nebude sestavení vyloženo. 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á pro kopírování souborů ve stínovém režimu, sestavení z aplikační cesty se zkopírují do jiného umístění a načtou z tohoto 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ínově kopí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 vlastnosti ShadowCopyFiles na řetězcovou hodnotu "true".

    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 vlastnosti ApplicationName s vlastností CachePath jako podadresářem. Sestavení jsou stínově kopírována do podadresářů v rámci 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í. Není vyvolána žádná výjimka.

    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í nastavení je kopírovat všechna sestavení v cestě aplikace, tedy v adresářích určených vlastnostmi ApplicationBase a PrivateBinPath. 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 kopírována do stínového adresáře, jsou ta, která se nacházejí 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 při spuš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 nověji 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 s 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.

Viz také