Stínové kopírování sestavení

Stínové kopírování 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ý způsob, jak uvolnit sestavení z domény aplikace, je uvolněním domény aplikace, takže za normálních okolností nelze na disku aktualizovat sestavení, dokud nebudou uvolněny všechny domény aplikace, které ji 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 zamknutá, ale původní soubor sestavení je odemknutý a dá se aktualizovat.

Důležité

Jediná sestavení, která mohou být stínem zkopírována, jsou ty, které jsou uloženy v adresáři aplikace nebo v jeho podadresáři, určené vlastnostmi ApplicationBase při PrivateBinPath konfiguraci domény aplikace. Sestavení uložená v globální mezipaměti sestavení nejsou stínová kopie.

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, aby se zlepšil výkon 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í způsobí, že se všechna sestavení v cestě aplikace zkopírují do mezipaměti pro stahování před 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í pro stínové zkopírované soubory 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ínem zkopírována do podadresářů této cesty, nikoli do samotné základní cesty.

    Poznámka

    ApplicationName Pokud vlastnost 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 čištění adresářů a kopírování souborů, pokud už nejsou potřeba. Neodstraní se automaticky.

    Existuje několik důvodů, proč můžete chtít nastavit vlastní umístění pro stínované zkopírované soubory. Pokud vaše aplikace generuje velký počet kopií, můžete chtít nastavit vlastní umístění pro stínové zkopírované soubory. 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 to, že uživatelé, kteří používají vaši aplikaci, nemají přístup k zápisu do umístění adresáře, které modul clr (Common Language Runtime) používá pro mezipaměť stahování.

  • Volitelně omezte sestavení, která jsou stínem zkopírována pomocí ShadowCopyDirectories vlastnosti.

    Když povolíte stínové kopírování pro doménu aplikace, ve výchozím nastavení se zkopírují všechna sestavení v cestě aplikace – to znamená v adresářích určených vlastnostmi ApplicationBase a PrivateBinPath vlastnostmi. Kopírování do vybraných adresářů můžete omezit vytvořením řetězce, který obsahuje pouze ty adresáře, které chcete stínovat, a přiřazením řetězce vlastnosti ShadowCopyDirectories . Oddělte adresáře středníky. Jediná sestavení, která jsou stínovaná, 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, všechna sestavení v adresářích určených vlastnostmi ApplicationBasePrivateBinPath budou stínově zkopírována.

    Důležité

    Cesty adresáře nesmí obsahovat středníky, protože středník je znak oddělovačem. 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, aby bylo možné zjistit, jestli byla aktualizována v poslední době než kopie v adresáři stínové kopie. Pokud ano, byl zkopírován do adresáře stínové kopie. Nakonec byly dočasné kopie zahozeny.

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 předchozí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í nemění často 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é kopie 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ínové kopírování je použití vlastností AppDomainSetup třídy.

Viz také