ASP.NET webbdistribution med Visual Studio: Web.config filtransformeringar

av Tom Dykstra

Ladda ned Startprojekt

Den här självstudieserien visar hur du distribuerar (publicerar) en ASP.NET webbapp till Azure App Service Web Apps eller till en tredjepartsvärdleverantör med hjälp av Visual Studio 2012 eller Visual Studio 2010. Information om serien finns i den första självstudien i serien.

Översikt

Den här självstudien visar hur du automatiserar processen med att ändra Web.config-filen när du distribuerar den till olika målmiljöer. De flesta program har inställningar i denWeb.config filen som måste vara annorlunda när programmet distribueras. Om du automatiserar processen med att göra dessa ändringar behöver du inte göra dem manuellt varje gång du distribuerar, vilket skulle vara omständligt och felbenäget.

Påminnelse: Om du får ett felmeddelande eller om något inte fungerar under genomgången av självstudien, bör du kontrollera felsökningssidan.

Web.config transformeringar jämfört med parametrar för webbdistribution

Det finns två sätt att automatisera processen med att ändra Web.config filinställningar: Web.config transformeringar och parametrar för webbdistribution. En Web.config transformeringsfil innehåller XML-kod som anger hur du ändrarWeb.config-filen när den distribueras. Du kan ange olika ändringar för specifika byggkonfigurationer och för specifika publiceringsprofiler. Standardkonfigurationerna för bygget är Felsökning och Version, och du kan skapa anpassade byggkonfigurationer. En publiceringsprofil motsvarar vanligtvis en målmiljö. (Du får lära dig mer om publiceringsprofiler i tutorialen Distribuera till IIS som testmiljö.)

Parametrar för webbdistribution kan användas för att ange många olika typer av inställningar som måste konfigureras under distributionen, inklusive inställningar som finns i Web.config filer. När de används för att ange Web.config filändringar är webbdistributionsparametrar mer komplexa att konfigurera, men de är användbara när du inte vet vilket värde som ska anges förrän du distribuerar. I en företagsmiljö kan du till exempel skapa ett distributionspaket och ge det till en person på IT-avdelningen att installera i produktion, och den personen måste kunna ange anslutningssträngar eller lösenord som du inte känner till.

I det scenario som den här självstudieserien beskriver vet du i förväg allt som måste göras med filenWeb.config , så du behöver inte använda parametrar för webbdistribution. Du konfigurerar vissa transformeringar som skiljer sig beroende på vilken byggkonfiguration som används och vissa som skiljer sig beroende på vilken publiceringsprofil som används.

Ange Web.config-inställningar i Azure

Om de inställningar i Web.config-filen som du vill ändra finns i <connectionStrings>-elementet eller <appSettings>-elementet, och om du distribuerar till Web Apps i Azure App Service, har du ett annat alternativ för att automatisera ändringar under distribution. Du kan ange de inställningar som du vill ska börja gälla i Azure på fliken Konfigurera på sidan för hanteringsportalen för webbappen (rulla ned till avsnitten appinställningar och anslutningssträngar ). När du distribuerar projektet tillämpar Azure automatiskt ändringarna. Mer information finns i Windows Azure-webbplatser: Hur programsträngar och anslutningssträngar fungerar.

Standardtransformeringsfiler

I Solution Explorer expandera Web.config för att se Web.Debug.config och Web.Release.config transformationsfiler som skapas som standard för de två standardbyggkonfigurationerna.

Web.config_transform_files

Du kan skapa transformeringsfiler för anpassade byggkonfigurationer genom att högerklicka på filen Web.config och välja Lägg till konfigurationstransformering från snabbmenyn. I den här självstudien behöver du inte göra det och menyalternativet är inaktiverat eftersom du inte har skapat några anpassade byggkonfigurationer.

Senare skapar du ytterligare tre transformeringsfiler, en vardera för test-, mellanlagrings- och produktionspubliceringsprofilerna. Ett typiskt exempel på en inställning som du skulle hantera i en transformeringsfil för publiceringsprofil eftersom den beror på målmiljön är en WCF-slutpunkt som skiljer sig för test jämfört med produktion. Du kommer att skapa transformeringsfiler för publiceringsprofiler i senare handledningar efter att du har skapat de publiceringsprofiler som de hör till.

Inaktivera felsökningsläge

Ett exempel på en inställning som är beroende av byggkonfiguration snarare än målmiljö är attributet debug . För en release vill du vanligtvis att felsökning inaktiveras oavsett miljö du distribuerar till. Därför skapar Visual Studio-projektmallarna som standard Web.Release.config transformationsfiler med kod som tar bort attributet debug från elementet compilation. Här är standard -Web.Release.config: Förutom någon exempeltransformeringskod som kommenteras ut innehåller den kod i elementet compilation som tar bort debug attributet:

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

Attributet xdt:Transform="RemoveAttributes(debug)" anger att du vill debug att attributet ska tas bort från elementet system.web/compilation i den distribuerade Web.config filen. Detta görs varje gång du distribuerar en releasekompilering.

Begränsa åtkomsten till felloggen till administratörer

Om det uppstår ett fel när programmet körs visar programmet en allmän felsida i stället för den systemgenererade felsidan och använder NuGet-paketet Elmah för felloggning och rapportering. Elementet customErrors i programmet Web.config-filen anger felsidan:

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

För att se felsidan, ändra tillfälligt attributet hos elementet customErrors från "RemoteOnly" till "Påslagen" och kör sedan applikationen från Visual Studio. Orsaka ett fel genom att begära en ogiltig URL, till exempel Studentsxxx.aspx. I stället för en IIS-genererad felsida för "Resursen kan inte hittas" visas sidan GenericErrorPage.aspx .

Felsida

Om du vill se felloggen ersätter du allt i URL:en efter portnumret med elmah.axd (till exempel http://localhost:51130/elmah.axd) och trycker på Retur:

ELMAH-sida

Glöm inte att ställa in elementet customErrors i läget "RemoteOnly" igen när du är klar.

På utvecklingsdatorn är det praktiskt att tillåta kostnadsfri åtkomst till felloggsidan, men i produktion skulle det vara en säkerhetsrisk. För produktionssidan vill du lägga till en auktoriseringsregel som begränsar åtkomsten till felloggar till administratörer, och för att säkerställa att begränsningen fungerar vill du ha den i både test- och stagingmiljöerna. Det här är därför en annan ändring som du vill implementera varje gång du distribuerar en releasversion, och därför hör den hemma i filen Web.Release.config.

Öppna Web.Release.config och lägg till ett nytt location element omedelbart före den avslutande configuration taggen, som du ser här.

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

Attributvärdet Transform för "Insert" gör att det här location elementet läggs till som ett syskon till alla befintliga location element i Web.config-filen . (Det finns redan ett location element som anger auktoriseringsregler för sidan Uppdateringskrediter .)

Nu kan du förhandsgranska transformen för att se till att du har kodat den korrekt.

Högerklicka på Web.Release.config i Solution Explorer och klicka på Förhandsgranska transformering.

Förhandsvisningsmeny för transformering

En sida öppnas som visar utvecklingsfilenWeb.config till vänster och hur den distribuerade Web.config-filen kommer att se ut till höger, med ändringarna markerade.

Förhandsvisning av debugtransform

Skärmbild som visar Web.config förhandsversion med utvecklingsfilen till vänster och hur den distribuerade filen kommer att se ut till höger med ändringarna markerade.

( I förhandsversionen kanske du märker några ytterligare ändringar som du inte har skrivit transformeringar för: dessa omfattar vanligtvis borttagning av tomt utrymme som inte påverkar funktionaliteten.)

När du testar platsen efter distributionen testar du även att auktoriseringsregeln är effektiv.

Anmärkning

Säkerhetsanteckning Visa aldrig felinformation för allmänheten i ett produktionsprogram eller lagra informationen på en offentlig plats. Angripare kan använda felinformation för att identifiera sårbarheter på en webbplats. Om du använder ELMAH i ditt eget program konfigurerar du ELMAH för att minimera säkerhetsriskerna. ELMAH-exemplet i den här självstudien bör inte betraktas som en rekommenderad konfiguration. Det är ett exempel som valdes för att illustrera hur du hanterar en mapp som programmet måste kunna skapa filer i. Mer information finns om att säkra ELMAH-slutpunkten.

En inställning som du ska hantera i publicera profiltransformeringsfiler

Ett vanligt scenario är att ha Web.config filinställningar som måste vara olika i varje miljö som du distribuerar till. Ett program som anropar en WCF-tjänst kan till exempel behöva en annan slutpunkt i test- och produktionsmiljöer. Contoso University-programmet innehåller även en inställning av det här slaget. Den här inställningen styr en synlig indikator på en webbplats sidor som anger vilken miljö du befinner dig i, till exempel utveckling, test eller produktion. Inställningsvärdet avgör om programmet ska lägga till "(Dev)" eller "(Test)" i huvudrubriken på huvudsidan Site.Master :

Miljöindikator

Miljöindikatorn utelämnas när programmet körs i mellanlagring eller produktion.

Contoso University-webbsidorna läser ett värde som anges i appSettings filenWeb.config för att avgöra vilken miljö programmet körs i:

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

Värdet ska vara "Test" i testmiljön och "Prod" för mellanlagring och produktion.

Följande kod i en transformeringsfil implementerar den här omvandlingen:

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

Attributvärdet xdt:Transform "SetAttributes" anger att syftet med den här transformeringen är att ändra attributvärden för ett befintligt element i Web.config-filen . Attributvärdet xdt:Locator "Match(key)" anger att elementet som ska ändras är det vars key attribut matchar attributet key som anges här. Det enda andra attributet för elementet add är value, och det är vad som kommer att ändras i den distribuerade Web.config-filen . Koden som visas här gör att attributet value för elementet EnvironmentappSettings sätts till "Test" i den Web.config-fil som distribueras.

Den här transformeringen hör hemma i transformeringsfilerna för publiceringsprofilen, som du inte har skapat ännu. Du skapar och uppdaterar transformeringsfilerna som implementerar den här ändringen när du skapar publiceringsprofilerna för test-, mellanlagrings- och produktionsmiljöerna. Du kommer att göra det i handledningarna distribuera till IIS och distribuera till produktion.

Anmärkning

Eftersom den här inställningen finns i elementet <appSettings> har du ett annat alternativ för att ange omvandlingen när du distribuerar till Web Apps i Azure App Service Se Ange Web.config inställningar i Azure tidigare i det här avsnittet.

Ange anslutningssträngar

Även om standardtransformeringsfilen innehåller ett exempel som visar hur du uppdaterar en anslutningssträng, behöver du i de flesta fall inte konfigurera anslutningssträngtransformeringar, eftersom du kan ange anslutningssträngar i publiceringsprofilen. Det gör du i självstudiekursen distribuera till IIS och distribuera till produktion .

Sammanfattning

Nu har du gjort så mycket du kan med Web.config transformeringar innan du skapar publiceringsprofilerna, och du har sett en förhandsversion av vad som kommer att finnas i den distribuerade Web.config filen.

Skärmbild som visar Web.config förhandsversion med filen Original Web.config till vänster och hur transformerade Web.config-filen kommer att se ut till höger med ändringarna markerade.

I följande handledning tar du hand om uppgifter för att ställa in distributionen som kräver att du anger projektegenskaper.

Mer information

Mer information om ämnen som beskrivs i den här självstudien finns i Använda Web.config transformeringar för att ändra inställningar i målfilen Web.config eller app.config under distributionen i innehållskartan för webbdistribution för Visual Studio och ASP.NET.