Předkompilace webu (C#)
Visual Studio nabízí ASP.NET vývojářům dva typy projektů: projekty webových aplikací (WAP) a projekty webových serverů (WSP). Jedním z klíčových rozdílů mezi těmito dvěma typy projektů je, že wapy musí mít kód explicitně zkompilovaný před nasazením, zatímco kód v zprostředkovateli WSP lze automaticky zkompilovat na webovém serveru. Před nasazením je však možné předkompilovat WSP. Tento kurz zkoumá výhody předkompilace a ukazuje, jak předkompilovat web v sadě Visual Studio a z příkazového řádku.
Úvod
Visual Studio nabízí ASP.NET vývojářům dva různé typy projektů: projekty webových aplikací (WAP) a projekty webových serverů (WSP). Jedním z klíčových rozdílů mezi těmito typy projektů je, že protokoly WAP vyžadují explicitní kompilaci , zatímco wsPs používají automatickou kompilaci ve výchozím nastavení. Pomocí WAP zkompilujete kód webové aplikace do jednoho sestavení, které se vytvoří ve složce webu Bin
. Nasazení zahrnuje zkopírování obsahu značek ( .aspx.ascx
souborů a .master
) v projektu spolu s sestavením ve Bin
složce; samotné soubory třídy kódu na pozadí nemusí být nasazeny. Na druhé straně nasadíte wsPs zkopírováním značek stránek a jejich odpovídající třídy kódu na pozadí do produkčního prostředí. Třídy kódu na pozadí se kompilují na vyžádání na webovém serveru.
Poznámka
Další informace o rozdílech mezi modely projektu, explicitní a automatické kompilaci a o tom, jak model kompilace ovlivňuje nasazení, najdete v části Explicitní kompilace versus automatická kompilace v kurzu Určení souborů, které je potřeba nasadit.
Použití možnosti automatické kompilace je jednoduché. Neexistuje žádný explicitní krok kompilace a je třeba nasadit pouze soubory, které byly změněny, zatímco explicitní kompilace vyžaduje nasazení změněných stránek značek a právě zkompilovaného sestavení. Automatické nasazení má ale dvě potenciální nevýhody:
- Vzhledem k tomu, že se stránky musí automaticky zkompilovat při první návštěvě, může dojít k krátkému, ale znatelnému zpoždění při prvním požadavku na ASP.NET stránku po nasazení.
- Automatická kompilace vyžaduje, aby byl na webovém serveru k dispozici deklarativní kód i zdrojový kód. Tato možnost může být neatraktivní, pokud plánujete prodávat webovou aplikaci zákazníkům, kteří si ji nainstalují na jejich webové servery.
Pokud jsou některé z výše uvedených nedostatků jističem dohod, můžete buď přepnout na model WAP, nebo před nasazením předkompilovat WSP. Tento kurz zkoumá možnosti předkompilace, které jsou nejvhodnější pro hostovaný web, a provede procesem předkompilace a nasazením předkompilovaného webu.
Přehled ASP.NET generování a kompilace kódu
Než se podíváme na dostupné možnosti předkompilace, probereme si nejprve generování a kompilaci kódu, ke které dochází, když se poprvé od vytvoření nebo poslední aktualizace vyžádá ASP.NET stránka. Jak víte, ASP.NET stránky se skládají ze dvou částí: deklarativního kódu v .aspx
souboru a části zdrojového kódu, obvykle v samostatném souboru třídy kódu na pozadí (.aspx.cs
). Postup, který modul runtime provede při požadavku na ASP.NET stránku, závisí na modelu kompilace aplikace.
U wapů musí být zdrojový kód stránek před nasazením explicitně zkompilován do jednoho sestavení. Během nasazení se toto sestavení a různé značkové stránky zkopírují do produkčního prostředí. Když na webový server dorazí požadavek na ASP.NET stránku, modul runtime vytvoří instanci třídy kódu na pozadí stránky a vyvolá její ProcessRequest
metodu, která spustí životní cyklus stránky a nakonec vygeneruje obsah stránky, který se vrátí žadateli. Modul runtime může pracovat s třídou kódu na pozadí ASP.NET stránky, protože třída kódu na pozadí byla již před nasazením zkompilována do sestavení.
U wsps a automatické kompilace neexistuje žádný explicitní krok kompilace před nasazením. Nasazení místo toho zahrnuje zkopírování deklarativního obsahu i obsahu zdrojového kódu do produkčního prostředí. Když na webový server dorazí požadavek na ASP.NET stránku poprvé od vytvoření nebo poslední aktualizace stránky, musí modul runtime nejprve zkompilovat třídu kódu na pozadí do sestavení. Toto kompilované sestavení je uloženo ve složce %WINDIR%\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files
, ačkoli umístění této složky lze přizpůsobit prostřednictvím elementu <compilation tempDirectory="" />
<system.web>
, obvykle v Web.config
. Vzhledem k tomu, že sestavení je uloženo na disk, není nutné ho znovu zkompilovat při následných požadavcích na stejnou stránku.
Poznámka
Jak byste očekávali, při prvním vyžádání stránky (nebo poprvé od její změny) na webu, který používá automatickou kompilaci, dochází k mírnému zpoždění, protože kompilace kódu stránky a uložení výsledného sestavení na disk serveru chvíli trvá.
Stručně řečeno, při explicitní kompilaci musíte před nasazením zkompilovat zdrojový kód webu, čímž ušetříte modul runtime před provedením tohoto kroku. Při automatické kompilaci modul runtime zpracovává kompilaci zdrojového kódu stránek, ale s mírnými náklady na inicializaci při první návštěvě stránky od jejího vytvoření nebo poslední aktualizace.
Ale co deklarativní část ASP.NET stránek ( .aspx
soubor)? Je zřejmé, že mezi .aspx
soubory a kódem v jejich třídách kódu na pozadí existuje relace, protože webové ovládací prvky definované v deklarativním kódu jsou v kódu přístupné. Je také zřejmé, že obsah v souborech .aspx
výrazně ovlivňuje vykreslené značky generované stránkou. Jak tedy modul runtime pracuje s textovou syntaxí, jazykem HTML a webovou řídicí syntaxí definovanou .aspx
v souboru za účelem vygenerování vygenerovaného obsahu požadované stránky?
Nechci se příliš odsunout od podrobností o implementaci nízké úrovně, které se liší mezi WAP a WSPs, ale v kostce modul runtime automaticky vygeneruje soubor třídy, který obsahuje různé webové ovládací prvky jako chráněné členy a metody. Tento vygenerovaný soubor je implementován jako částečná třída do odpovídající třídy kódu na pozadí. (Částečné třídy umožňují rozprostřít obsah jedné třídy do více souborů.) Proto je třída kódu na pozadí definována na dvou místech: v .aspx.cs
souboru, který vytvoříte, a v této automaticky generované třídě vytvořené modulem runtime. Tato automaticky vygenerovaná třída je uložena ve %WINDIR%\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files
složce .
Důležité je, že aby modul runtime vykresloval stránku ASP.NET, musí být její části deklarativního i zdrojového kódu zkompilovány do sestavení. U WAP je zdrojový kód explicitně zkompilován do sestavení před nasazením, ale deklarativní kód musí být stále převeden na kód a zkompilován modulem runtime na webovém serveru. Pokud protokoly WSP používají automatickou kompilaci, musí webový server zkompilovat zdrojový kód i deklarativní kód.
S modelem WSP je možné použít explicitní kompilaci. Část zdrojového kódu můžete explicitně zkompilovat, například s modelem WAP. A co víc, můžete také zkompilovat deklarativní kód.
Možnosti předkompilace
Rozhraní .NET Framework se dodává s nástrojem pro kompilaci ASP.NET (aspnet_compiler.exe
), který umožňuje kompilovat zdrojový kód (a dokonce i obsah) ASP.NET aplikace vytvořené pomocí modelu WSP. Tento nástroj byl vydán s rozhraním .NET Framework verze 2.0 a nachází se ve %WINDIR%\Microsoft.NET\Framework\v2.0.50727
složce . Můžete ho použít z příkazového řádku nebo spustit ze sady Visual Studio prostřednictvím možnosti Publikovat web v nabídce Sestavení.
Nástroj pro kompilaci poskytuje dvě obecné formy kompilace: místní předkompilace a předkompilace pro nasazení. Při místní předkompilace spustíte aspnet_compiler.exe
nástroj z příkazového řádku a určíte cestu k virtuálnímu adresáři nebo fyzické cestě webu, který se nachází ve vašem počítači. Nástroj pro kompilaci pak zkompiluje každou ASP.NET stránku v projektu a zkompilovanou verzi uloží do %WINDIR%\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files
složky stejně, jako kdyby byly stránky poprvé navštíveny v prohlížeči. Místní předkompilace může urychlit první požadavek na nově nasazené ASP.NET stránky na vašem webu, protože to zmírní modul runtime, aby tento krok nemusel provést. Místní předkompilace však není užitečná pro většinu hostovaných webů, protože vyžaduje, abyste mohli spouštět programy z příkazového řádku webového serveru. Ve sdílených hostitelských prostředích není tato úroveň přístupu povolená.
Poznámka
Další informace o místní předkompilaci najdete v tématu Postupy: Předkompilování ASP.NET webů a předkompilování v ASP.NET 2.0.
Místo kompilace stránek na webu do Temporary ASP.NET Files
složky předkompilace pro nasazení zkompiluje stránky do adresáře podle vašeho výběru a ve formátu, který lze nasadit do produkčního prostředí.
Existují dva druhy předkompilace nasazení, které v tomto kurzu prozkoumáme: předkompilace s aktualizovatelným uživatelským rozhraním a předkompilace s nedatovatelným uživatelským rozhraním. Předkompilace s aktualizovatelným uživatelským rozhraním ponechá deklarativní kód v .aspx
souborech , .ascx
a , a .master
umožňuje tak vývojáři zobrazit a v případě potřeby upravit deklarativní kód na produkčním serveru. Předkompilace s nedatovatelným uživatelským rozhraním generuje .aspx
stránky, které jsou neplatné z jakéhokoli obsahu, odebere .ascx
soubory a .master
tím skryje deklarativní kód a zakáže vývojáři jeho změnu z produkčního prostředí.
Předkompilování nasazení s aktualizovatelným uživatelským rozhraním
Nejlepším způsobem, jak porozumět předkompilace nasazení, je vidět příklad v akci. Pojďme předkompilovat WSP book Reviews pro nasazení pomocí aktualizovatelného uživatelského rozhraní. Nástroj pro kompilaci ASP.NET lze vyvolat z nabídky Sestavení sady Visual Studio nebo z příkazového řádku. Tato část zkoumá použití nástroje v sadě Visual Studio. Část "Předkompilování z příkazového řádku" se podívá na spuštění nástroje kompilátoru z příkazového řádku.
Otevřete WSP pro kontrolu knihy v sadě Visual Studio, přejděte do nabídky Sestavení a vyberte možnost nabídky Publikovat web. Tím se otevře dialogové okno Publikovat web (viz Obrázek 1), kde můžete zadat cílové umístění, zda je uživatelské rozhraní předkompilovaného webu aktualizovatelné, a další možnosti nástrojů kompilátoru. Cílovým umístěním může být vzdálený webový server nebo server FTP, ale prozatím zvolte složku na pevném disku počítače. Vzhledem k tomu, že chceme web předkompilovat s aktualizovatelným uživatelským rozhraním, nechte zaškrtnuté políčko "Povolit, aby tento předkompilovaný web byl aktualizovatelný" a klikněte na OK.
Obrázek 1: Nástroj pro kompilaci ASP.NET předkompilituje váš web na zadané cílové umístění
(Kliknutím zobrazíte obrázek v plné velikosti.)
Poznámka
Možnost Publikovat web v nabídce Sestavení není k dispozici v aplikaci Visual Web Developer. Pokud používáte Visual Web Developer, budete muset použít verzi nástroje pro kompilaci ASP.NET z příkazového řádku, která je popsána v části "Předkompilování z příkazového řádku".
Po předkompilování webu přejděte do cílového umístění, které jste zadali v dialogovém okně Publikovat web. Chvíli se podívejte na porovnání obsahu této složky s obsahem vašeho webu. Obrázek 2 ukazuje složku webu Recenze knih. Všimněte si, že obsahuje soubory i .aspx
.aspx.cs
. Všimněte si také, že Bin
adresář obsahuje pouze jeden soubor , Elmah.dll
který jsme přidali v předchozím kurzu.
Obrázek 2: Adresář projektu obsahuje .aspx
soubory a .aspx.cs
; Bin
složka obsahuje pouze Elmah.dll
(Kliknutím zobrazíte obrázek v plné velikosti.)
Obrázek 3 znázorňuje složku cílového umístění, jejíž obsah byl vytvořen nástrojem pro kompilaci ASP.NET. Tato složka neobsahuje žádné soubory kódu na pozadí. Kromě toho adresář této složky Bin
obsahuje několik sestavení a dva .compiled
soubory kromě Elmah.dll
sestavení.
Obrázek 3: Složka cílového umístění obsahuje soubory pro nasazení
(Kliknutím zobrazíte obrázek v plné velikosti.)
Na rozdíl od explicitní kompilace v protokolech WAP nevytvoří předkompilace procesu nasazení jedno sestavení pro celou lokalitu. Místo toho seskupuje několik stránek do každého sestavení. Také zkompiluje Global.asax
soubor (pokud je k dispozici) do vlastního sestavení a také jakékoli třídy ve App_Code
složce. Soubory, které obsahují deklarativní kód pro ASP.NET webových stránek, uživatelských ovládacích prvků a stránek předlohy (.aspx
, .ascx
a .master
souborů), se zkopírují tak, jak jsou, do cílového adresáře umístění. Stejně tak se Web.config
soubor přímo zkopíruje spolu se všemi statickými soubory, jako jsou obrázky, třídy CSS a soubory PDF. Formálnější popis toho, jak nástroj pro kompilaci zpracovává různé typy souborů, najdete v tématu Zpracování souborů během ASP.NET předkompilace.
Poznámka
Nástroj pro kompilaci můžete dát pokyn k vytvoření jednoho sestavení pro každou stránku ASP.NET, uživatelský ovládací prvek nebo stránku předlohy zaškrtnutím políčka "Použitá pevná pojmenování a jednostránková sestavení" v dialogovém okně Publikovat web. Kompilace každé ASP.NET stránky do vlastního sestavení umožňuje podrobnější kontrolu nad nasazením. Pokud jste například aktualizovali jednu ASP.NET webovou stránku a potřebovali tuto změnu nasadit, stačí do produkčního prostředí nasadit pouze soubor této stránky .aspx
a přidružené sestavení. Další informace najdete v tématu Postupy: Generování pevných názvů pomocí nástroje pro kompilaci ASP.NET .
Cílový adresář umístění obsahuje také soubor, který nebyl součástí předkompilovaného webového projektu, konkrétně PrecompiledApp.config
. Tento soubor informuje modul runtime ASP.NET, že aplikace byla předkompilována a zda byla předkompilována s aktualizovatelným nebo nedatovatelným uživatelským rozhraním.
Nakonec se dejte chvíli otevřít jeden ze .aspx
souborů v cílovém umístění pomocí sady Visual Studio nebo libovolného textového editoru. Při předkompilování nasazení s aktualizovatelným uživatelským rozhraním obsahují stránky ASP.NET v adresáři cílového umístění přesně stejné značky jako odpovídající soubory na webu.
Předkompilování nasazení s nedatovatelným uživatelským rozhraním
Nástroj kompilátoru ASP.NET lze také použít k předkompilování lokality pro nasazení s nedatovatelným uživatelským rozhraním. Předkompilování webu s nedatovatelným uživatelským rozhraním funguje podobně jako předkompilování s aktualizovatelným uživatelským rozhraním. Hlavní rozdíl spočívá v tom, že stránky ASP.NET, uživatelské ovládací prvky a stránky předlohy v cílovém adresáři jsou odstraněny ze svých značek. Pokud chcete předkompilovat web pro nasazení s nedatelným uživatelským rozhraním, zvolte možnost Publikovat web z nabídky Sestavení, ale zrušte zaškrtnutí políčka Povolit, aby byl tento předkompilovaný web aktualizovatelný (viz Obrázek 4).
Obrázek 4: Zrušte zaškrtnutí možnosti Povolit, aby tento předkompilovaný web byl aktualizovatelný, pokud chcete předkompilovat s nedatovatelným uživatelským rozhraním.
(Kliknutím zobrazíte obrázek v plné velikosti.)
Obrázek 5 ukazuje složku cílového umístění po předkompilování s nedatovatelným uživatelským rozhraním.
Obrázek 5: Složka cílového umístění pro nasazení s nedatelným uživatelským rozhraním
(Kliknutím zobrazíte obrázek v plné velikosti.)
Porovnejte obrázek 3 s obrázkem 5. I když tyto dvě složky můžou vypadat identicky, všimněte si, Site.master
že ve složce uživatelského rozhraní, která nelze aktualizovat, chybí stránka předlohy . A i když Obrázek 5 obsahuje různé ASP.NET stránky, při zobrazení obsahu těchto souborů uvidíte, že byly odstraněny z deklarativního kódu a nahrazeny zástupným textem: "Toto je soubor značky vygenerovaný nástrojem pro předkompilace a neměl by se odstranit!"
Obrázek 5: Ze stránek ASP.NET byly odebrány deklarativní značky.
Složky Bin
na obrázcích 3 a 5 se podstatně liší. Kromě sestavení obsahuje .compiled
složka na obrázkuBin
5 soubor pro každou stránku ASP.NET, uživatelský ovládací prvek a stránku předlohy.
Předkompilování webu s nedatovatelným uživatelským rozhraním je užitečné v situacích, kdy nechcete, aby osoba nebo společnost, která instaluje nebo spravuje web v produkčním prostředí, upravoval obsah ASP.NET stránek. Pokud vytvoříte ASP.NET webovou aplikaci, kterou prodáváte zákazníkům, aby si ji nainstalovali na jejich vlastní webové servery, můžete se ujistit, že nebudou měnit vzhled a chování vašeho webu přímou .aspx
úpravou stránek, které odesíláte. Předkompilováním webu s nedatovatelným uživatelským rozhraním doručíte zástupné .aspx
stránky jako součást instalace, čímž zabráníte zákazníkům v prozkoumávání nebo úpravách jejich obsahu.
Předkompilování z příkazového řádku
Dialogové okno Publikovat web v sadě Visual Studio na pozadí vyvolá nástroj pro kompilaci ASP.NET (aspnet_compiler.exe
) k předkompilování webu. Alternativně můžete tento nástroj vyvolat z příkazového řádku. Ve skutečnosti, pokud použijete Visual Web Developer, budete muset spustit nástroj kompilátoru z příkazového řádku, protože Visual Web Developer's Build menu neobsahuje možnost Publikovat web.
Pokud chcete použít nástroj kompilátoru z příkazového řádku, začněte tak, že přejdete na příkazový řádek a přejdete do adresáře %WINDIR%\Microsoft.NET\Framework\v2.0.50727
architektury . Potom do příkazového řádku zadejte následující příkaz:
aspnet_compiler -p "physical_path_to_app" -v / -f -u "target_location_folder"
Výše uvedený příkaz spustí nástroj kompilátoru ASP.NET (aspnet_compiler.exe
) a prostřednictvím -p
přepínače ho instruuje, aby předkompiloval web s kořenem v physical_path_to_app. Tato hodnota bude něco jako C:\MySites\BookReviews
a měla by být oddělená uvozovkami.
Přepínač -v
určuje virtuální adresář lokality. Pokud je váš web zaregistrovaný jako výchozí web v metabázi služby IIS, můžete přepínač vynechat -p
a zadat virtuální adresář aplikace. Pokud použijete -p
přepínač, hodnota následující v -v
přepínači označuje kořen webu a používá se k překladu odkazů na kořen aplikace. Pokud například zadáte hodnotu -v /MySite
, odkazy v aplikaci na ~/path/file
se přeloží jako ~/MySite/path/file
. Vzhledem k tomu, Book Recenze webu se nachází v kořenovém adresáři v mé web hosting společnosti jsem použil přepínač -v /
.
Přepínač -f
, pokud je k dispozici, dává nástroji pro kompilaci pokyn, aby přepsal adresář target_location_folder , pokud již existuje. Pokud vynecháte -f
přepínač a složka cílového umístění již existuje, nástroj pro kompilaci se ukončí s chybou: "chyba ASPRUNTIME: Cílový adresář není prázdný. Odstraňte ho prosím ručně nebo zvolte jiný cíl."
Přepínač -u
, pokud je k dispozici, informuje nástroj o vytvoření aktualizovatelného uživatelského rozhraní. Tento přepínač vynechejte, pokud chcete předkompilovat lokalitu s nedatovatelným uživatelským rozhraním.
A konečně , target_location_folder je fyzická cesta k cílovému adresáři umístění; tato hodnota bude něco jako C:\MySites\Output\BookReviews
a měla by být oddělena uvozovkami.
Nasazení předkompilovaného webu
V tomto okamžiku jsme viděli, jak pomocí nástroje pro kompilaci ASP.NET předkompilovat web pomocí aktualizovatelných i nedatovatelných možností uživatelského rozhraní. Naše příklady ale zatím web předkompilovaly do místní složky, a ne do produkčního prostředí. Dobrou zprávou je, že nasazení předkompilovaného webu je hračka a můžete ho provést prostřednictvím sady Visual Studio nebo jiného mechanismu kopírování souborů, například ze samostatného klienta FTP.
Dialogové okno Publikovat web (poprvé zobrazené na obrázku 1) obsahuje možnost cílového umístění, která označuje, kam se předkompilované soubory webu zkopírují. Tímto umístěním může být vzdálený webový server nebo server FTP. Zadáním vzdáleného serveru do tohoto textového pole se v jednom kroku předkompiliuje a nasadí web na zadaný server. Alternativně můžete web předkompilovat do místní složky a pak obsah této složky ručně zkopírovat do produkčního prostředí prostřednictvím protokolu FTP nebo jiného přístupu.
Automatické nasazení předkompilovaného webu prostřednictvím dialogového okna Publikovat web v sadě Visual Studio je užitečné pro jednoduché weby, kde nejsou žádné rozdíly v konfiguraci vývojového a produkčního prostředí. Jak je však uvedeno v kurzu Běžné rozdíly v konfiguraci mezi vývojem a produkčním prostředím, není neobvyklé, že takové rozdíly existují. Například webová aplikace Recenze knih používá v produkčním prostředí jinou databázi než ve vývojovém prostředí. Když Visual Studio publikuje web na vzdálený server, slepě zkopíruje informace o konfiguračním souboru ve vývojovém prostředí.
Pro lokality s rozdíly v konfiguraci mezi vývojovým a produkčním prostředím může být nejvhodnější lokalitu předkompilovat do místního adresáře, zkopírovat konfigurační soubory specifické pro produkční prostředí a pak zkopírovat obsah předkompilovaného výstupu do produkčního prostředí.
Informace o kopírování souborů z vývojového prostředí do produkčního prostředí najdete v kurzech Nasazení webu pomocí klienta FTP a Nasazení webu pomocí sady Visual Studio .
Souhrn
ASP.NET podporuje dva režimy kompilace: automatický a explicitní. Jak bylo popsáno v předchozích kurzech, projekty webových aplikací (WAP) používají explicitní kompilaci, zatímco projekty webových stránek (WSP) používají automatickou kompilaci ve výchozím nastavení. Před nasazením je však možné explicitně zkompilovat WSP pomocí nástroje pro kompilaci ASP.NET.
Tento kurz se zaměřil na předkompilaci pro podporu nasazení nástroje pro kompilaci. Při předkompilování pro nasazení nástroj pro kompilaci vytvoří složku cílového umístění, zkompiluje zdrojový kód zadané webové aplikace a zkopíruje tato kompilovaná sestavení a soubory obsahu do složky cílového umístění. Nástroj pro kompilaci lze nakonfigurovat tak, aby vytvořil aktualizovatelné nebo nedatovatelné uživatelské rozhraní. Při předkompilování s možností nedatovatelného uživatelského rozhraní je deklarativní kód v souborech obsahu odebrán. Stručně řečeno, předkompilace umožňuje nasadit aplikaci založenou na webovém projektu bez zahrnutí souborů zdrojového kódu a deklarativní kód odstraněn, pokud je to žádoucí.
Všechno nejlepší na programování!
Další čtení
Další informace o tématech probíraných v tomto kurzu najdete v následujících zdrojích informací: