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

Tom Dykstra

Stáhnout úvodní projekt

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

Přehled

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

Připomenutí: Pokud se 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íží.

Transformace Web.config versus parametry nasazení webu

Existují dva způsoby, jak automatizovat proces změny nastavení souboru Web.config : transformace Web.config a parametry nasazení webu. Transformační soubor Web.config obsahuje kód XML, který určuje, jak změnit soubor Web.config při nasazení. Pro konkrétní konfigurace sestavení a pro konkrétní profily publikování můžete zadat různé změny. Výchozí konfigurace sestavení jsou Debug a Release a můžete vytvářet vlastní konfigurace sestavení. Profil publikování obvykle odpovídá cílovému prostředí. (Další informace o profilech publikování najdete v tématu Nasazení do služby IIS jako kurz testovacího prostředí .)

Parametry nasazení webu lze použít k určení mnoha různých typů nastavení, která je potřeba nakonfigurovat během nasazení, včetně nastavení nalezených v souborech Web.config . Při použití k určení změn souboru Web.config jsou parametry nasazení webu složitější, ale jsou užitečné, pokud neznáte hodnotu, kterou chcete nastavit, dokud nenasadíte. V podnikovém prostředí můžete například vytvořit balíček nasazení a dát ho osobě v IT oddělení, která se má nainstalovat v produkčním prostředí, a tato osoba musí být schopná zadat připojovací řetězec nebo hesla, která neznáte.

Pro scénář, který tato série kurzů popisuje, víte předem vše, co je nutné provést v souboru Web.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í.

Určení nastavení Web.config v Azure

Pokud se nastavení souboru Web.config, které chcete změnit, nachází v <connectionStrings> souboru nebo <appSettings> prvku a pokud nasazujete do Web Apps ve službě Aplikace Azure Service, máte další možnost pro automatizaci změn během nasazování. Nastavení, která se mají projevit v Azure, můžete zadat na kartě Konfigurace stránky portálu pro správu vaší webové aplikace (posuňte se dolů k nastavení aplikace a částem připojovací řetězec s). Když projekt nasadíte, Azure změny automaticky použije. Další informace najdete na webech Windows Azure: Jak fungují řetězce aplikací a připojovací řetězce.

Výchozí transformační soubory

V Průzkumník řešení rozbalte web.config, aby se zobrazily transformační soubory Web.Debug.config a Web.Release.config, které jsou vytvořeny ve výchozím nastavení 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, jeden pro testovací, pracovní a produkční profily publikování. Typický příklad 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 testování a produkční prostředí. Transformační soubory profilu publikování vytvoříte v pozdějších kurzech po vytvoření profilů publikování, se kterými budou pokračovat.

Zakázání režimu ladění

Příkladem nastavení, které závisí na konfiguraci sestavení místo cílového prostředí, je debug atribut. U sestavení vydané verze obvykle chcete zakázat ladění bez ohledu na to, do kterého prostředí nasazujete. Proto ve výchozím nastavení šablony projektů sady Visual Studio vytvářejí soubory transformace Web.Release.config s kódem, který odebere debug atribut z elementu compilation . Tady je výchozí web.Release.config: Kromě některého ukázkového transformačního kódu, který je okomentován, obsahuje kód v elementucompilation, 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 má debug být atribut odebrán z elementu system.web/compilation v nasazeného souboru Web.config . To se provede pokaždé, když nasadíte sestavení vydané verze.

Omezení přístupu k protokolům chyb správcům

Pokud při spuštění aplikace dojde k chybě, zobrazí aplikace místo systémové chybové stránky obecnou chybovou stránku a používá balíček Elmah NuGet pro protokolování chyb a hlášení. Prvek customErrors v souboru Web.config aplikace 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. Pokud požadujete neplatnou adresu URL, například Studentsxxx.aspx, může dojít k chybě. Místo chybové stránky "Prostředek nelze najít" se zobrazí stránka GenericErrorPage.aspx .

Chybová stránka

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

Stránka ELMAH

Nezapomeňte po dokončení nastavit customErrors prvek 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. V produkční lokalitě chcete přidat autorizační pravidlo, které omezuje přístup k protokolu chyb správcům, a zajistit, aby toto omezení fungovalo i v testovacím a přípravném prostředí. Proto je to další změna, kterou chcete implementovat pokaždé, když nasadíte sestavení vydané verze, a proto patří do souboru Web.Release.config .

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

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

Transform Hodnota atributu "Insert" způsobí, že tento location prvek bude přidán jako seznam na stejné straně k jakýmkoli existujícím location prvkům v souboru Web.config. (Existuje již jeden location prvek, který určuje autorizační pravidla pro stránku Aktualizovat kredity .)

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

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, která zobrazí soubor Web.config pro vývoj na levé straně a na pravé straně se zvýrazněnými změnami bude vypadat nasazený soubor Web.config.

Náhled transformace ladění

Snímek obrazovky zobrazující verzi Web.config Preview s vývojovým souborem na levé straně a to, 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í lokality po nasazení otestujete také ověření platnosti autorizačního pravidla.

Poznámka:

Poznámka zabezpečení – Nikdy nezobrazuje podrobnosti o chybě veřejnosti v produkční aplikaci nebo tyto informace uložte do veřejného umístění. Útočníci můžou k zjišťování ohrožení zabezpečení na webu použít informace o chybách. Pokud používáte ELMAH ve vlastní aplikaci, nakonfigurujte ELMAH tak, aby minimalizoval rizika zabezpečení. Příklad ELMAH v tomto kurzu by neměl být považován za doporučenou konfiguraci. Je to příklad, který byl vybrán, aby ilustroval, jak zpracovat složku, ve které musí být aplikace schopna vytvářet soubory. Další informace najdete v tématu zabezpečení koncového bodu ELMAH.

Nastavení, které budete zpracovávat v souborech transformace profilu publikování

Běžným scénářem je nastavení souboru Web.config , které se musí v každém prostředí, do kterého nasadíte, 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 říká, ve kterém prostředí se nacházíte, například vývoj, testování nebo produkce. Hodnota nastavení určuje, zda aplikace připojí k hlavnímu nadpisu na stránce předlohy Site.Master "(Dev)" nebo "(Test)":

Indikátor prostředí

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

Webové stránky Contoso University čtou hodnotu nastavenou v appSettings souboru Web.config , aby bylo možné určit, ve které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řípravu a produkci.

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 souboru Web.config. Hodnota xdt:Locator atributu "Match(key)" označuje, že prvek, který má být změněn, je ten, jehož key atribut odpovídá atributu zadanému key zde. Jediným dalším atributem elementu add je value, a to je to, co se změní v nasazeného souboru Web.config . Zde uvedený kód způsobí value , že atribut elementu Environment appSettings bude nastaven na "Test" v souboru Web.config , který je nasazen.

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

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 ve službě Aplikace Azure Viz Určení nastavení Web.config v Azure dříve 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é nastavit připojovací řetězec transformace, protože můžete zadat připojovací řetězec v profilu publikování. Provedete to v nasazení do služby IIS a nasadíte je do produkčních kurzů.

Shrnutí

Před vytvořením profilů publikování jste udělali co nejvíce transformací Web.config a viděli jste náhled toho, co bude v nasazeného souboru Web.config.

Snímek obrazovky zobrazující náhled Web.config s původním souborem Web.config vlevo a na pravé straně se zvýrazněnými změnami bude vypadat transformovaný soubor Web.config.

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 popsaných v tomto kurzu najdete v tématu Použití transformací Web.config ke změně nastavení v cílovém souboru Web.config nebo souboru app.config během nasazování v mapě obsahu nasazení webu pro Visual Studio a ASP.NET.