Sdílet prostřednictvím


Předkompilace webu (VB)

Scott Mitchell

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.ascxsouborů 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ánky 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.vb). Kroky prováděné modulem runtime při požadavku na stránku ASP.NET 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 přijde požadavek na ASP.NET stránku, modul runtime vytvoří instanci třídy kódu na pozadí stránky a vyvolá svou 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 pomocí <pages> prvku v Web.config. Vzhledem k tomu, že je sestavení 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š odsouvat od podrobností o implementaci nízké úrovně, které se mezi jednotlivými protokoly WAP a WSPs liší, 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.vb 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í. S 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 ASP.NET kompilačním nástrojem (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 v sadě 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 .aspxsouborech , .ascxa , 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 vygeneruje .aspx stránky, které neobsahují žádný obsah, a odebere .ascx soubory a .master tím skryje deklarativní kód a zakáže vývojáři jeho změnu v produkčním 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.

Snímek obrazovky, který ukazuje, jak nástroj pro kompilaci s p dot NET předkompiluje váš web

Obrázek 1: Nástroj pro kompilaci ASP.NET předkompiluje 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 příkazového řádku nástroje pro kompilaci ASP.NET, 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.dllkterý jsme přidali v předchozím kurzu.

Snímek obrazovky znázorňující soubory s tečkou a s p x tečkou a s p x tečkou c s s v adresáři projektu

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í.

Snímek obrazovky znázorňující soubory pro nasazení ve složce cílového umístění

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 pro proces nasazení jedno sestavení pro celou lokalitu. Místo toho seskupí několik stránek do každého sestavení. Zkompiluje Global.asax také soubor (pokud je k dispozici) do vlastního sestavení a také všechny třídy ve App_Code složce. Soubory, které obsahují deklarativní značky pro webové stránky ASP.NET, uživatelské ovládací prvky a stránky předlohy (.aspx, .ascxa .master soubory v uvedeném pořadí), 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 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

Můžete dát kompilačnímu nástroji pokyn, aby vytvořil jedno sestavení na stránce ASP.NET, uživatelském ovládacím prvku nebo stránce předlohy zaškrtnutím políčka "Použitá pevná pojmenování a jednostránková sestavení" v dialogovém okně Publikovat web. Zkompilování každé ASP.NET stránky do vlastního sestavení umožňuje podrobnější kontrolu nad nasazením. Pokud jste například aktualizovali jednu webovou stránku ASP.NET a potřebovali jste tuto změnu nasadit, stačí do produkčního prostředí nasadit jenom 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, a to .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 noon-aktualizovatelným uživatelským rozhraním.

Nakonec chvíli otevřete 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í webu 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 zbaveny 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).

Snímek obrazovky s možností Povolit, aby byl tento předkompilovaný web aktualizovatelný

Obrázek 4: Pokud chcete předkompilovat uživatelské rozhraní bez aktualizace, zrušte zaškrtnutí políčka Povolit předkompilování tohoto předkompilovaného webu.
(Kliknutím zobrazíte obrázek v plné velikosti.)

Obrázek 5 znázorňuje cílovou složku umístění po předkompilování s nedatovatelným uživatelským rozhraním.

Snímek obrazovky znázorňující složku cílového umístění pro nasazení s nedatovatelným uživatelským rozhraním

Obrázek 5: Složka cílového umístění pro nasazení s nedatovatelný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 stejně, všimněte si, že ve složce uživatelského rozhraní, která nelze aktualizovat, chybí stránka předlohy. Site.master 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ích značek a nahrazeny zástupným textem: "Toto je soubor značky vygenerovaný nástrojem pro předkompilace a neměl by být odstraněn!"

Snímek obrazovky, který ukazuje, že deklarativní revize byly odebrány ze stránek s p dot NET.

Obrázek 5: Deklarativní revize byla odebrána z ASP.NET stránek

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 nedatelným uživatelským rozhraním je užitečné v situacích, kdy nechcete, aby obsah stránek ASP.NET upravoval osoba nebo společnost, která web instaluje nebo spravuje v produkčním prostředí. Pokud vytváří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é jim odesíláte. Když web předkompilujete s nedatelný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 prohlížení nebo úpravách jejich obsahu.

Předkompilování z příkazového řádku

Dialogové okno Publikovat web v sadě Visual Studio vyvolá nástroj pro kompilaci ASP.NET (aspnet_compiler.exe) pro předkompilování webu. Případně můžete tento nástroj vyvolat z příkazového řádku. Pokud používáte 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 přechodem na příkazový řádek a přechodem do adresáře %WINDIR%\Microsoft.NET\Framework\v2.0.50727architektury . Dále 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ělena 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 stačí zadat virtuální adresář aplikace. Pokud použijete -p přepínač, hodnota, -v která pokračuje 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 stránky 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á nástroji pro kompilaci pokyn, aby přepsal adresář target_location_folder , pokud již existuje. Pokud přepínač vynecháte -f 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í. Pokud chcete web předkompilovat s nedatovatelným uživatelským rozhraním, tento přepínač vynechejte.

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í možností aktualizovatelného i nedatovatelného uživatelského rozhraní. Naše dosavadní příklady ale 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 dá se 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) má 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ředkompiluje a nasadí web na zadaný server. Případně 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í přes FTP nebo jiný přístup.

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 mezi vývojovým a produkčním prostředím. Jak je však uvedeno v kurzu Běžné rozdíly konfigurace mezi vývojem a produkčním prostředím, není neobvyklé, že takové rozdíly existují. Například webová aplikace Book Reviews 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, naslepo zkopíruje informace o konfiguračním souboru ve vývojovém prostředí.

Pro lokality s rozdíly konfigurace mezi vývojovým a produkčním prostředím může být nejvhodnější předkompilovat web 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í.

Aktualizace 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 webů (WSPs) používají ve výchozím nastavení automatickou kompilaci. 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 prekompilace nástroje pro podporu nasazení. 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 zkompilovaná 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í uživatelského rozhraní, které nelze aktualizovat, deklarativní značky v souborech obsahu jsou odebrány. Stručně řečeno, předkompilace umožňuje nasadit aplikaci založenou na webovém projektu bez zahrnutí souborů zdrojového kódu a v případě potřeby odebrat deklarativní značky.

Šťastné programování!

Další čtení

Další informace o tématech probíraných v tomto kurzu najdete v následujících zdrojích informací:

PreviousNext /previous-versions/aspnet/bb398860(v=vs.100)