Stínové kopírování sestavení
Stínové kopírování umožňuje sestavením, která jsou používána v doméně aplikace aktualizování bez uvolňování domény aplikace. To je zejména užitečné u aplikací, které musí být dostupné nepřetržitě, jako jsou například weby technologie ASP.NET.
Modul CLR (Common Language Runtime) uzamkne soubor sestavení po načtení sestavení, takže soubor nemůže být aktualizován, dokud není sestavení uvolněno. Jediným způsobem, jak uvolnit sestavení z domény aplikace je uvolnění domény aplikace. Za normálních okolností nemůže být sestavení aktualizováno na disk dokud nejsou uvolněny všechny domény aplikací, které jej používají.
Pokud je doména aplikace nakonfigurována tak, aby používala stínové kopie souborů, sestavení jsou ze zadané cesty k aplikaci zkopírovány do jiného umístění a načteny z tohoto umístění. Kopie je uzamčená, ale původní soubor sestavení je odemknut a může být aktualizován.
Důležité |
---|
Jediná sestavení, která lze kopírovat pomocí stínových kopií jsou ty, které jsou uloženy v adresáři aplikace nebo jeho podadresářích, které jsou zadány vlastností ApplicationBase a PrivateBinPath při konfiguraci domény aplikace. Sestavení, která jsou uloženy v globální mezipaměti sestavení (GAC) nejsou kopírována pomocí stínových kopií. |
Tento článek obsahuje následující části:
Povolení a použití stínového kopírování popisuje základní použití a možnosti, které jsou k dispozici pro stínové kopírování.
Výkonnost spouštění popisuje změny, které jsou provedeny ve stínovém kopírování v rozhraní .NET Framework verze 4 pro zlepšení výkonnosti spouštění a popisuje jak se vrátit k chování předcházejícíh verzí.
Zastaralé metody popisuje změny, které byly provedeny k vlastnostem a metodám tohoto ovládacího prvku Stínové kopírování v .NET Framework 2.0.
Povolení a použití stínového kopírování
Můžete použít vlastnosti třídy AppDomainSetup, tak jak je uvedeno, ke konfiguraci domény aplikace pro stínové kopírování:
Povolte stínové kopírování nastavením vlastnosti ShadowCopyFiles na řetězcovou hodnotu "true".
Ve ve výchozím nastavením toto nastavení způsobí, že všechna sestavení v cestě k aplikaci budou před načtením zkopírována do mezipaměti pro stahování. Toto je stejná mezipaměť udržovaná modulem CLR k uložení souborů stažených z jiných počítačů a modul CLR automaticky odstraní soubory, pokud je již není dále třeba.
Volitelně můžete nastavit vlastní umístění pro soubory vytvořené pomocí stínového kopírování pomocí vlastností CachePath a ApplicationName.
Základní cesta pro umístění je tvořena zřetězením vlastnosti ApplicationName a vlastnosti CachePath jako podadresáře. Sestavení jsou zkopírována do podadresáře této cesty, ne do samotné základní cesty.
Poznámka Pokud není nastavena vlastnost ApplicationName, vlastnost CachePath je ignorována a je použita mezipaměť pro stahování. Žádná výjimka není vyvolána.
Pokud zadáte vlastní umístění, jste odpovědní za vyčištění adresářů a zkopírovaných souborů, pokud již dále nejsou potřebné. Nejsou odstraněny automaticky.
Existuje několik důvodů, proč byste mohli nastavit vlastní umístění pro soubory vytvořené stínovým kopírováním. Můžete chtít nastavit vlastní umístění pro soubory vytvořené stínovým kopírováním v případě, že vaše aplikace vytváří velký počet kopií. Mezipaměť pro stahování má omezenou velikost, nikoli dobu platnosti, je tedy možné, že se modul CLR pokusí odstranit soubor, který je stále používán. Dalším důvodem pro nastavení vlastního umístění je případ, kdy uživatelé používající aplikaci nemají přístup pro zapisování k adresáři, který modul CLR používá pro mezipaměť stahování.
Volitelně omezte sestavení, která používají stínové kopie pomocí vlastnosti ShadowCopyDirectories.
Pokud povolíte stínové kopírování pro doménu aplikace, výchozím nastavením je zkopírování všech sestavení z cesty k aplikaci – to znamená adresáře určené vlastnostmi ApplicationBase a PrivateBinPath. Můžete omezit kopírování na vybrané adresáře vytvořením řetězce, který obsahuje pouze adresáře, které chcete použít pro stínové kopírování a přiřadit řetězec k vlastnosti ShadowCopyDirectories. Adresáře oddělte středníky. Pouze sestavení, která jsou ve vybraných adresářích jsou používána pro stínové kopírování.
Důležité Cesty k adresářům nesmí obsahovat středníky, protože je středník použitý pro znak oddělovače.Není k dispozici žádný řídicí znak pro středníky.
Výkonnost spouštění
Po spuštění domény aplikace používající stínové kopírování existuje zpoždění při tom, když jsou sestavení v adresáři aplikace kopírovány do adresáře stínové kopie nebo při ověření, zda jsou již v tomto umístění. Před rozhraním .NET Framework 4, byla všechna sestavení kopírována do dočasného adresáře. Každé sestavení bylo otevřeno pro ověření názvu sestavení a byl ověřen silný název. Každé sestavení bylo zkontrolováno, zda bylo aktualizováno dříve než kopie v adresáři stínové kopie. Pokud ano, bylo zkopírováno do adresáře stínové kopie. Nakonec byly dočasné kopie vyřazeny.
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 souboru každého sestavení v adresáři aplikace s datem a časem souboru v adresáři stínové kopie. Pokud bylo sestavení aktualizováno, je zkopírováno pomocí stejné procedury jako v předchozích verzích rozhraní .NET Framework. V opačném případě je načtena kopie z adresáře 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 jsou obvykle prováděny v malé podmnožině sestavení. Pokud se mění často většina sestavení v aplikaci, nové výchozí chování může způsobit snížení výkonu. Můžete obnovit chování při spuštění z předchozích verzí rozhraní .NET Framework přidáním elementu <shadowCopyVerifyByTimestamp> element ke konfiguračnímu souboru s enabled="false".
Zastaralé metody
Třída AppDomain má několik metod, jako jsou například SetShadowCopyFiles a ClearShadowCopyPath, které mohou být použity k řízení stínového kopírování na doméně aplikace, ale tyto byly označeny jako 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í třídy AppDomainSetup.
Viz také
Odkaz
AppDomainSetup.ShadowCopyFiles
AppDomainSetup.ApplicationName
AppDomainSetup.ShadowCopyDirectories