ASP.NET nasazení webu pomocí sady Visual Studio: transformace souborů Web.config

Tom Dykstra

Stažení úvodního projektu

V této sérii kurzů se dozvíte, jak pomocí sady Visual Studio 2012 nebo Visual Studio 2010 nasadit (publikovat) ASP.NET webovou aplikaci do Azure App Service Web Apps nebo u poskytovatele hostingu třetí strany. Informace o této sérii najdete v prvním kurzu této série.

Přehled

V tomto kurzu se dozvíte, jak automatizovat proces změny souboruWeb.config při jeho nasazení do různých cílových prostředí. Většina aplikací má v souboruWeb.config nastavení, která se musí při nasazení aplikace lišit. Automatizace procesu provádění těchto změn vám zabrání v tom, abyste je při každém nasazení museli provádět ručně, což by bylo zdlouhavé a náchylné k chybám.

Připomenutí: Pokud se vám při procházení kurzu zobrazí chybová zpráva nebo něco nefunguje, nezapomeňte se podívat na stránku pro řešení potíží.

Web.config transformací versus parametry nasazení webu

Proces změny nastavení souboruWeb.config můžete automatizovat dvěma způsoby: Web.config transformací a parametrů nasazení webu. Transformační soubor Web.config obsahuje kód XML, který určuje, jak změnit souborWeb.config při nasazení. Můžete zadat různé změny pro konkrétní konfigurace sestavení a pro konkrétní profily publikování. Výchozí konfigurace sestavení jsou Ladění a Vydání a můžete vytvářet vlastní konfigurace sestavení. Profil publikování obvykle odpovídá cílovému prostředí. (Další informace o publikování profilů najdete v kurzu Nasazení do služby IIS jako testovacího prostředí .)

Parametry nasazení webu se dají použít k určení mnoha různých druhů nastavení, které se musí nakonfigurovat během nasazení, včetně nastavení, která se nacházejí v Web.config souborech. Při použití k určení Web.config změn souborů je nastavení parametrů nasazení webu složitější, ale jsou užitečné, pokud neznáte hodnotu, která se má nastavit, dokud nasazení nenasadíte. Například v podnikovém prostředí můžete vytvořit balíček pro nasazení a předat ho osobě v IT oddělení, aby ho mohla nainstalovat v produkčním prostředí, a tato osoba musí mít možnost zadat připojovací řetězce nebo hesla, která neznáte.

Pro scénář, který tato série kurzů popisuje, víte předem vše, co je třeba udělat se souboremWeb.config , takže nemusíte používat parametry nasazení webu. Nakonfigurujete některé transformace, které se liší v závislosti na použité konfiguraci sestavení, a některé, které se liší v závislosti na použitém profilu publikování.

Zadání nastavení Web.config v Azure

Pokud Web.config nastavení souboru, které chcete změnit, jsou v elementu <connectionStrings> nebo <appSettings> a pokud nasazujete do Web Apps v Azure App Service, máte další možnost pro automatizaci změn během nasazení. Nastavení, která se mají v Azure projevit, můžete zadat na kartě Konfigurace na stránce portálu pro správu vaší webové aplikace (posuňte se dolů do části Nastavení aplikace a připojovací řetězce ). Když projekt nasadíte, Azure automaticky použije změny. Další informace najdete v tématu Weby Windows Azure: Jak fungují řetězce aplikací a připojovací řetězce.

Výchozí soubory transformace

V Průzkumník řešení rozbalte Web.config a zobrazte soubory transformaceWeb.Debug.config a Web.Release.config, které jsou ve výchozím nastavení vytvořeny pro dvě výchozí konfigurace sestavení.

Web.config_transform_files

Transformační soubory pro vlastní konfigurace sestavení můžete vytvořit tak, že kliknete pravým tlačítkem na soubor Web.config a v místní nabídce zvolíte Přidat transformace konfigurace . V tomto kurzu to nemusíte dělat a možnost nabídky je zakázaná, protože jste nevytvořili žádné vlastní konfigurace sestavení.

Později vytvoříte tři další transformační soubory, po jednom pro profily testovacího, přípravného a produkčního publikování. Typickým příkladem nastavení, které byste zpracovávali v transformačním souboru profilu publikování, protože závisí na cílovém prostředí, je koncový bod WCF, který se liší pro testovací a produkční. Transformační soubory profilu publikování vytvoříte v pozdějších kurzech po vytvoření profilů publikování, ke kterým patří.

Zakázat režim ladění

Příkladem nastavení, které závisí na konfiguraci sestavení, nikoli na cílovém debug prostředí, je atribut . U sestavení vydané verze obvykle chcete ladění zakázat bez ohledu na to, do kterého prostředí nasazujete. Proto šablony projektů sady Visual Studio ve výchozím nastavení vytvářejí Web.Release.config transformují soubory s kódem, který odebere debug atribut z elementu compilation . Tady je výchozí Web.Release.config: Kromě některého vzorového kódu transformace, který je zakomentovaný, obsahuje kód v elementu compilation , který odebere debug atribut :

<?xml version="1.0" encoding="utf-8"?>

<!-- For more information on using web.config transformation visit https://go.microsoft.com/fwlink/?LinkId=125889 -->

<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <!--
    In the example below, the "SetAttributes" transform will change the value of 
    "connectionString" to use "ReleaseSQLServer" only when the "Match" locator 
    finds an attribute "name" that has a value of "MyDB".
    
    <connectionStrings>
      <add name="MyDB" 
        connectionString="Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True" 
        xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
    </connectionStrings>
  -->
  <system.web>
    <compilation xdt:Transform="RemoveAttributes(debug)" />
    <!--
      In the example below, the "Replace" transform will replace the entire 
      <customErrors> section of your web.config file.
      Note that because there is only one customErrors section under the 
      <system.web> node, there is no need to use the "xdt:Locator" attribute.
      
      <customErrors defaultRedirect="GenericError.htm"
        mode="RemoteOnly" xdt:Transform="Replace">
        <error statusCode="500" redirect="InternalError.htm"/>
      </customErrors>
    -->
  </system.web>
</configuration>

Atribut xdt:Transform="RemoveAttributes(debug)" určuje, že chcete debug odebrat atribut z elementu system.web/compilation v nasazené Web.config souboru. To se provede pokaždé, když nasadíte build vydané verze.

Omezení přístupu k protokolu chyb na správce

Pokud během běhu aplikace dojde k chybě, aplikace místo systémem generované chybové stránky zobrazí obecnou chybovou stránku a k protokolování a hlášení chyb používá balíček NuGet Elmah . Prvek customErrors v souboru aplikaceWeb.config určuje chybovou stránku:

<customErrors mode="RemoteOnly" defaultRedirect="~/GenericErrorPage.aspx">
  <error statusCode="404" redirect="~/GenericErrorPage.aspx" />
</customErrors>

Pokud chcete zobrazit chybovou stránku, dočasně změňte mode atribut elementu customErrors z "RemoteOnly" na "Zapnuto" a spusťte aplikaci ze sady Visual Studio. Vyžádejte si neplatnou adresu URL, například Studentsxxx.aspx, k chybě. Místo chybové stránky "Prostředek nelze najít" vygenerované službou IIS se zobrazí stránka GenericErrorPage.aspx .

Chybová stránka

Pokud chcete zobrazit protokol chyb, nahraďte vše v adrese URL za číslem portu elmah.axd (například http://localhost:51130/elmah.axd) a stiskněte Enter:

Stránka ELMAH

Až budete hotovi, nezapomeňte element nastavit customErrors zpět do režimu RemoteOnly.

Na vývojovém počítači je vhodné povolit volný přístup ke stránce protokolu chyb, ale v produkčním prostředí by to bylo bezpečnostní riziko. Pro produkční web chcete přidat autorizační pravidlo, které omezí přístup k protokolu chyb na správce, a zajistit, aby omezení fungovalo i v testovacím a přípravném prostředí. Proto se jedná o další změnu, kterou chcete implementovat při každém nasazení sestavení vydané verze, a proto patří doWeb.Release.config souboru.

Otevřete Web.Release.config a bezprostředně před uzavírací configuration značku přidejte nový location prvek, jak je znázorněno tady.

<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <!--
    In the example below, the "SetAttributes" transform will change the value of 
    "connectionString" to use "ReleaseSQLServer" only when the "Match" locator 
    finds an attribute "name" that has a value of "MyDB".
    
    <connectionStrings>
      <add name="MyDB" 
        connectionString="Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True" 
        xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
    </connectionStrings>
  -->
  <system.web>
    <compilation xdt:Transform="RemoveAttributes(debug)" />
    <!--
      In the example below, the "Replace" transform will replace the entire 
      <customErrors> section of your web.config file.
      Note that because there is only one customErrors section under the 
      <system.web> node, there is no need to use the "xdt:Locator" attribute.
      
      <customErrors defaultRedirect="GenericError.htm"
        mode="RemoteOnly" xdt:Transform="Replace">
        <error statusCode="500" redirect="InternalError.htm"/>
      </customErrors>
    -->
  </system.web>
  <location path="elmah.axd" xdt:Transform="Insert">
    <system.web>
      <authorization>
        <allow roles="Administrator" />
        <deny users="*" />
      </authorization>
    </system.web>
  </location>
</configuration>

Hodnota Transform atributu "Insert" způsobí, že tento location prvek bude přidán jako prvek na stejné hodnotě ke všem existujícím location prvkům v souboruWeb.config . (Už existuje jeden location prvek, který určuje autorizační pravidla pro stránku Aktualizovat kredity .)

Teď si můžete zobrazit náhled transformace, abyste měli jistotu, že jste ji naprogramovali správně.

V Průzkumník řešení klikněte pravým tlačítkem na Web.Release.config a klikněte na Náhled transformace.

Nabídka Náhled transformace

Otevře se stránka s informacemi o souboru vývojovéhoWeb.config vlevo a o tom, jak bude nasazený souborWeb.config vypadat na pravé straně se zvýrazněnými změnami.

Náhled transformace ladění

Snímek obrazovky znázorňující Web.config Preview s vývojovým souborem na levé straně a s tím, jak bude nasazený soubor vypadat vpravo se zvýrazněnými změnami

(Ve verzi Preview si můžete všimnout některých dalších změn, pro které jste nepropsali transformace: obvykle se jedná o odebrání prázdných znaků, které nemají vliv na funkčnost.)

Při testování webu po nasazení také otestujete, abyste ověřili platnost autorizačního pravidla.

Poznámka

Poznámka k zabezpečení Nikdy nezobrazovat podrobnosti o chybách veřejnosti v produkční aplikaci ani tyto informace neukládejte ve veřejném umístění. Útočníci můžou informace o chybách použít ke zjištění ohrožení zabezpečení na webu. Pokud používáte ELMAH ve vlastní aplikaci, nakonfigurujte ho tak, aby se minimalizovala bezpečnostní rizika. Příklad ELMAH v tomto kurzu by neměl být považován za doporučenou konfiguraci. Jedná se o příklad, který byl zvolen za účelem ilustrace zpracování složky, ve které musí být aplikace schopna vytvářet soubory. Další informace najdete v tématu o zabezpečení koncového bodu ELMAH.

Nastavení, které budete zpracovávat v transformačních souborech profilu publikování

Běžným scénářem je Web.config nastavení souborů, které se musí v každém prostředí, do kterého nasazujete, lišit. Například aplikace, která volá službu WCF, může v testovacím a produkčním prostředí potřebovat jiný koncový bod. Aplikace Contoso University obsahuje také nastavení tohoto typu. Toto nastavení řídí viditelný indikátor na stránkách webu, který vám řekne, ve kterém prostředí se nacházíte, například vývoj, testování nebo produkce. Hodnota nastavení určuje, jestli aplikace připojí "(Dev)" nebo "(Test)" k hlavnímu nadpisu na stránce předlohy Site.Master :

Indikátor prostředí

Pokud je aplikace spuštěná v přípravném nebo produkčním prostředí, indikátor prostředí se vynechá.

Webové stránky Contoso University načtou hodnotu nastavenou v appSettings souboruWeb.config , aby bylo možné určit, v jakém prostředí aplikace běží:

<appSettings>
    <add key="Environment" value="Dev" />
</appSettings>

Hodnota by měla být "Test" v testovacím prostředí a "Prod" pro přípravné a produkční prostředí.

Následující kód v transformačním souboru implementuje tuto transformaci:

<appSettings>
    <add key="Environment" value="Test" xdt:Transform="SetAttributes" xdt:Locator="Match(key)"/>
</appSettings>

xdt:Transform Hodnota atributu SetAttributes označuje, že účelem této transformace je změnit hodnoty atributů existujícího prvku v souboruWeb.config. Hodnota xdt:Locator atributu Match(key) označuje, že element, který se má upravit, je ten, jehož key atribut odpovídá atributu zadanému key zde. Jediný další atribut elementu add je value, a to se změní v nasazené Web.config souboru. Kód zde uvedený způsobí value , že atribut elementu EnvironmentappSettings se v nasazenéWeb.config souboru nastaví na test.

Tato transformace patří do souborů transformace profilu publikování, které jste ještě nevytvořili. Transformační soubory, které implementují tuto změnu, vytvoříte a aktualizujete při vytváření profilů publikování pro testovací, přípravné a produkční prostředí. Provedete to v kurzech nasazení do služby IIS a nasazení do produkčního prostředí .

Poznámka

Vzhledem k tomu, že toto nastavení je v elementu <appSettings> , máte další alternativu k určení transformace při nasazování do Web Apps v Azure App Service Viz Zadání nastavení Web.config v Azure výše v tomto tématu.

Nastavení připojovacích řetězců

I když výchozí transformační soubor obsahuje příklad, který ukazuje, jak aktualizovat připojovací řetězec, ve většině případů není nutné nastavovat transformace připojovacího řetězce, protože můžete zadat připojovací řetězce v profilu publikování. Provedete to v kurzech nasazení do služby IIS a nasazení do produkčního prostředí .

Souhrn

Před vytvořením profilů publikování jste teď udělali co nejvíce práce s transformacemiWeb.config a viděli jste náhled toho, co bude v nasazených Web.config souborech.

Snímek obrazovky znázorňující náhled Web.config se souborem Původní Web.config vlevo a s tím, jak bude transformovaný soubor Web.config vypadat na pravé straně se zvýrazněnými změnami

V následujícím kurzu se postaráte o úlohy nastavení nasazení, které vyžadují nastavení vlastností projektu.

Další informace

Další informace o tématech probíraných v tomto kurzu najdete v tématu Použití Web.config transformací ke změně nastavení v cílovém souboru Web.config nebo app.config souboru během nasazení v Mapě obsahu nasazení webu pro Visual Studio a ASP.NET.