Byla tato stránka užitečná?
Váš názor na tento obsah je důležitý. Sdělte nám, co si myslíte.
Další podněty?
Zbývající počet znaků: 1500
Exportovat (0) Tisk
Rozbalit vše

Vysvětlení dynamické kompilace ASP.NET

.NET Framework 4

Aby webová aplikace mohla obsloužit požadavky, technologie ASP.NET musí nejprve rozebrat a zkompilovat kód webové aplikace do jednoho nebo více sestavení. Když je kód zkompilován, je převeden do jazykově a procesorově nezávislého vyjádření zvaného jazyk MSIL (Microsoft Intermediate Language). V době spuštění běží jazyk MSIL v kontextu rozhraní .NET Framework, který převádí jazyk MSIL na procesorově specifické instrukce pro procesor v počítači, ve kterém je spuštěna aplikace.

Dynamická kompilace technologie ASP.NET umožňuje změnit zdrojový kód, aniž by bylo nutné explicitně zkompilovat kód před nasazením webové aplikace. Pokud upravíte zdrojový soubor, technologie ASP.NET automaticky překompiluje soubor a aktualizuje všechny připojené zdroje. Server služby IIS nemusí být restartován, aby se projevily změny, pokud se změnil oddíl <processmodel>.

Systém sestavení technologie ASP.NET můžete rozšířit vytvořením vlastních zprostředkovatelů sestavení pro nové typy souborů, které jsou volány během kompilace.

Ve výchozím nastavení jsou webové stránky ASP.NET a soubory kódu kompilovány dynamicky při prvním požadavku uživatele na prostředek, jako je stránka ASP.NET (soubor .aspx) z webu. Potom, co byly stránky a soubory kódů poprvé zkompilovány, jsou zkompilované prostředky ukládány do mezipaměti, takže jsou další požadavky na stejnou stránku velmi efektivní.

Technologie ASP.NET podporuje dynamickou kompilaci stránek ASP.NET (soubory .aspx), webových služeb ASP.NET (soubory .asmx), obslužných rutin žádostí o webovou stránku ASP.NET (soubory .ashx) a aplikačních souborů ASP.NET (Global.asax), stejně jako dalších souborů, jako jsou zdrojové kódy a soubory tříd. Další informace o typech souborů technologie ASP.NET naleznete v tématu Typy souborů webového projektu ASP.NET. Další informace o procesu kompilace technologie ASP.NET naleznete v oddílu "Životní cyklus kompilace" v tématu Přehled životního cyklu aplikace technologie ASP.NET pro službu IIS 5.0 a 6.0.

Jakékoli změny v dynamicky zkompilovaném souboru automaticky zruší platnost souboru zkompilovaného sestavení v mezipaměti a spustí rekompilaci všech postižených prostředků. Při dalším požadavku na kód rozpozná technologie ASP.NET, že byl kód změněn a znovu zkompiluje postižené prostředky webové aplikace. Tento systém umožňuje rychle vyvíjet aplikace s minimální režií při zpracování kompilace. (Všimněte si, že v závislosti na změněných prostředcích může být výsledek z rozsahu od rekompilace jedné stránky po rekompilaci celého webu.)

Při prvním požadavku na aplikaci, zkompiluje ASP.NET soubory v určitém pořadí. První kompilované položky jsou označovány jako položky nejvyšší úrovně. Po prvním požadavku jsou položky nejvyšší úrovně znovu kompilovány pouze v případě, že se změní závislost.

Položky nejvyšší úrovně zahrnují složku App_GlobalResources, složku App_WebResources, vlastnosti profilu, složku App_Code a soubor Global.asax. Potom, co jsou zkompilovány položky nejvyšší úrovně, zkompiluje technologie ASP.NET další položky. Tyto položky zahrnují složku App_LocalResources, jednotlivé stránky ASP.NET (soubory .aspx), uživatelské ovládací prvky ASP.NET (soubory .ascx), obslužné rutiny žádostí o webovou stránku ASP.NET (soubory .ashx) a moduly HTTP ASP.NET (soubory .asmx), stejně jako motivy, stránky předloh a další zdrojové soubory.

Další informace naleznete v tématu Struktura složek webového projektu ASP.NET a v oddílu "Životní cyklus kompilace" v tématu Přehled životního cyklu aplikace technologie ASP.NET pro službu IIS 5.0 a 6.0.

Pokud je kód zkompilován, jsou výsledná sestavení v mezipaměti ve složce na serveru. Tato složka vyžaduje odpovídající oprávnění, aby se kód správně zkompiloval a spustil. Můžete konfigurovat umístění složky kompilace a oprávnění, pod kterými se kód kompiluje a pracuje.

Umístění složky kompilace

Ve výchozím nastavení je při kompilaci webové aplikace zkompilovaný kód umístěn ve složce dočasných souborů technologie ASP.NET. Tato složka je podadresářem umístění, kam jste nainstalovali rozhraní .NET Framework. Umístění je obvykle následující:

%SystemRoot%\Microsoft.NET\Framework\versionNumber\Temporary ASP.NET Files

Požadovaná oprávnění složky kompilace

Instalační proces rozhraní .NET vytvoří složku dočasných souborů ASP.NET a přiřadí přístupová oprávnění místnímu uživatelskému účtu technologie ASP.NET, který má oprávnění vysoké důvěryhodnosti potřebné pro přístup ke zkompilovanému kódu. Pokud změníte konfiguraci nebo nastavení účtu, musíte se přesvědčit, zda má použitý účet oprávnění vysoké důvěryhodnosti ke složce dočasných souborů technologie ASP.NET. Další podrobnosti naleznete v tématu Postupy: Spustit pracovní proces pod uživatel účtu.

Konfigurovatelnost složky kompilace

Technologie ASP.NET vytvoří samostatnou podsložku složky dočasných souborů technologie ASP.NET pro každou aplikaci. Pomocí atributu tempDirectory oddílu kompilace konfiguračního souboru můžete nastavit umístění kořenového adresáře. Tento volitelný atribut umožňuje určit adresář, který chcete použít jako úložiště dočasných souborů během kompilace. Výchozí hodnota je prázdný řetězec (""). V případě prázdného řetězce a pokud má aktuální proces potřebná přístupová oprávnění, jsou soubory uloženy v následujícím adresáři:

%FrameworkInstallLocation%\Temporary ASP.NET Files

Další informace naleznete v tématu compilation element (schéma nastavení technologie ASP.NET) a u vlastnosti TempDirectory oddílu CompilationSection.

Technologie ASP.NET 2.0 podporuje více programovacích jazyků ve stejné webové aplikaci. Ve složce App_Code můžete určit podsložku pro každý jazyk, jako je C# a Visual Basic. Technologie ASP.NET vytvoří samostatné sestavení pro každou podsložku. Další informace naleznete v tématu Složky sdíleného kódu ve webových projektech ASP.NET a Návod: použití více programovacích jazyků ve webovém projektu.

Ve výchozím nastavení se při jakékoli změně souboru nejvyšší úrovně na webu celý web znovu zkompiluje. Soubory nejvyšší úrovně zahrnují soubor global.asax a všechny soubory ve složkách bin a App_Code. Jakmile se některý z těchto souborů změní, je nejbezpečnější vše překompilovat, protože jiné soubory na webu, jako jsou soubory .aspx a .ascx, mohou odkazovat na objekty vytvořené kódem v souborech nejvyšší úrovně.

Když během rekompilace funguje u většiny aplikací vše správně, u velkých aplikací to může způsobit dlouhodobou nedostupnost, i když byly provedeny drobné změny. Pokud je aplikace dostatečně velká, může být po provedení změn pět až deset nebo více minut nedostupná.

Pokud budete chtít změnit soubory nejvyšší úrovně, aniž by došlo k rekompilaci celého webu, můžete nastavit atribut optimizeCompilations elementu compilation v souboru Web.config na true. Jestliže je atribut optimizeCompilations true, pak když změníte soubor nejvyšší úrovně, budou rekompilovány pouze postižené soubory. Tím se ušetří čas, ale může to způsobit chyby za běhu v závislosti na typu změn provedených v souboru nejvyšší úrovně.

Následující typy změn jsou obvykle bezpečné:

  • Změna implementace metody. Vzhledem k tomu, že není signatura změněna, stránky zkompilované proti staré verzi můžou volat metodu bez vyvolání výjimky.

  • Přidání nových metod nebo vlastností. Vzhledem k tomu, že tyto dříve neexistovaly, žádné již zkompilované stránky na ně neodkazují a nebudou vyvolány žádné výjimky.

  • Přidání CLR atributu k existujícímu členu. Toto je obvyklý scénář dynamických dat, kde přidáváte atributy jako DisplayName vlastnostem. Protože jsou atributy CLR zjištěny za běhu pomocí reflexe, nemusí být existující stránky rekompilovány.

Následující typy změn můžou způsobit výjimky za běhu:

  • Přejmenování nebo odstranění metod nebo vlastností. Pokud je postižený člen odkazován již zkompilovanou stránkou, bude vyvolána výjimka.

  • Změna signatury metody nebo typu vlastnosti. Pokud je postižený člen odkazován již zkompilovanou stránkou, bude vyvolána výjimka. Některé změny signatur nezpůsobí kompilační chyby nebo chyby za běhu, pokud je celý web rekompilován. Například kód Response.Write(ClassA.MethodA() na stránce .aspx bude zkompilován a spuštěn v pořádku, pokud MethodA vrátí int nebo short. Ale pokud je již stránka .aspx zkompilována a změníte návratový typ metody MethodA z int na short bez rekompilace, bude vyvolána výjimka za běhu, protože zkompilovaný kód očekává signaturu int.

Pokud chcete použít atribut optimizeCompilations k minimalizaci času dynamické kompilace, měli byste pečlivě zkontrolovat každou provedenou změnu souborů nejvyšší úrovně na webu a pokud není konkrétní změna bezpečná, dočasně odeberte atribut optimizeCompilations nebo ho nastavte na false.

Existují určité možnosti, které dynamická kompilace nenabízí. Dynamická kompilace může znamenat pro uživatele pomalejší prvotní odezvu, protože stránky a soubory kódu musí být při svém prvním požadavku zkompilovány. To může být problém především u velkých webů, které jsou často aktualizovány. Dynamická kompilace neposkytuje prostředky k identifikaci chyb v době kompilace, předtím, než uživatelé přistoupí na web. Dynamická kompilace také neposkytuje možnost vytvořit zkompilovanou verzi webu, která může být nasazena na produkční server bez zdrojového kódu. Pokud se některý z těchto problémů týká vaší webové aplikace, můžete váš web předkompilovat. Podrobnější informace naleznete v tématu Přehled o předkompilaci technologie ASP.NET.

Obsah vytvořený komunitou

Přidat
Zobrazit:
© 2015 Microsoft