Udostępnij za pośrednictwem


ASP.NET wdrażanie w Sieci Web przy użyciu programu Visual Studio: przekształcenia plików Web.config

Autor: Tom Dykstra

Pobierz projekt startowy

W tej serii samouczków pokazano, jak wdrożyć (opublikować) aplikację internetową ASP.NET w celu aplikacja systemu Azure Service Web Apps lub dostawcy hostingu innej firmy przy użyciu programu Visual Studio 2012 lub Visual Studio 2010. Aby uzyskać informacje o serii, zobacz pierwszy samouczek z serii.

Omówienie

W tym samouczku pokazano, jak zautomatyzować proces zmiany pliku Web.config podczas wdrażania go w różnych środowiskach docelowych. Większość aplikacji ma ustawienia w pliku Web.config , które muszą być inne podczas wdrażania aplikacji. Automatyzacja procesu wprowadzania tych zmian pozwala na ręczne wykonywanie ich przy każdym wdrożeniu, co byłoby uciążliwe i podatne na błędy.

Przypomnienie: Jeśli zostanie wyświetlony komunikat o błędzie lub coś nie działa podczas pracy z samouczkiem, pamiętaj, aby sprawdzić stronę rozwiązywania problemów.

Przekształcenia Web.config a parametry web deploy

Istnieją dwa sposoby automatyzowania procesu zmiany ustawień pliku Web.config : przekształcenia Web.config i parametry web deploy. Plik przekształcenia Web.config zawiera znaczniki XML, które określają sposób zmiany pliku Web.config podczas wdrażania. Można określić różne zmiany dla określonych konfiguracji kompilacji i dla określonych profilów publikowania. Domyślne konfiguracje kompilacji to Debugowanie i wydawanie, a konfiguracje kompilacji niestandardowej można tworzyć. Profil publikowania zazwyczaj odpowiada środowisku docelowemu. (Więcej informacji na temat profilów publikowania znajdziesz w temacie Wdrażanie w usługach IIS jako samouczek dotyczący środowiska testowego).

Parametry narzędzia Web Deploy mogą służyć do określania wielu różnych rodzajów ustawień, które należy skonfigurować podczas wdrażania, w tym ustawień znajdujących się w plikach Web.config . W przypadku określania zmian w pliku Web.config parametry narzędzia Web Deploy są bardziej złożone do skonfigurowania, ale są przydatne, gdy nie znasz wartości, która ma zostać ustawiona do momentu wdrożenia. Na przykład w środowisku przedsiębiorstwa można utworzyć pakiet wdrożeniowy i przekazać go osobie w dziale IT do zainstalowania w środowisku produkcyjnym, a ta osoba musi mieć możliwość wprowadzania parametry połączenia lub haseł, których nie znasz.

W scenariuszu, który obejmuje ta seria samouczków, wiesz z wyprzedzeniem wszystko, co należy zrobić w pliku Web.config , więc nie trzeba używać parametrów web deploy. Skonfigurujesz pewne przekształcenia, które różnią się w zależności od używanej konfiguracji kompilacji, a niektóre różnią się w zależności od używanego profilu publikowania.

Określanie ustawień web.config na platformie Azure

Jeśli ustawienia pliku Web.config, które chcesz zmienić, znajdują się w <connectionStrings> elemecie lub <appSettings> , a jeśli wdrażasz w usłudze Web Apps w usłudze aplikacja systemu Azure, możesz zautomatyzować zmiany podczas wdrażania. Możesz wprowadzić ustawienia, które mają zostać zastosowane na platformie Azure na karcie Konfigurowanie strony portalu zarządzania dla aplikacji internetowej (przewiń w dół do ustawień aplikacji i sekcji parametry połączenia). Podczas wdrażania projektu platforma Azure automatycznie stosuje zmiany. Aby uzyskać więcej informacji, zobacz Witryny sieci Web platformy Windows Azure: jak działają parametry aplikacji i parametry połączenia.

Domyślne pliki transformacji

W Eksplorator rozwiązań rozwiń węzeł Web.config, aby wyświetlić pliki przekształceń Web.Debug.config i Web.Release.config, które są domyślnie tworzone dla dwóch domyślnych konfiguracji kompilacji.

Web.config_transform_files

Pliki transformacji dla niestandardowych konfiguracji kompilacji można utworzyć, klikając prawym przyciskiem myszy plik Web.config i wybierając polecenie Dodaj przekształcenia konfiguracji z menu kontekstowego. W tym samouczku nie musisz tego robić, a opcja menu jest wyłączona, ponieważ nie utworzono żadnych niestandardowych konfiguracji kompilacji.

Później utworzysz trzy kolejne pliki transformacji, po jednym dla profilów testowania, przejściowego i produkcyjnego publikowania. Typowym przykładem ustawienia, które można obsłużyć w pliku przekształcania profilu publikowania, ponieważ zależy to od środowiska docelowego, jest punkt końcowy programu WCF, który różni się w przypadku testowania i produkcji. Pliki przekształcania profilu publikowania zostaną utworzone w kolejnych samouczkach po utworzeniu profilów publikowania, z którymi są one używane.

Wyłączanie trybu debugowania

Przykładem ustawienia, które zależy od konfiguracji kompilacji, a nie środowiska docelowego, jest debug atrybut . W przypadku kompilacji wydania zwykle chcesz wyłączyć debugowanie niezależnie od środowiska, w którym wdrażasz. W związku z tym domyślnie szablony projektów programu Visual Studio tworzą pliki przekształcenia Web.Release.config z kodem, który usuwa debug atrybut z compilation elementu. Oto domyślna konfiguracja Web.Release.config: oprócz przykładowego kodu przekształcenia, który jest komentowany, zawiera kod w compilation elemecie, który usuwa debug atrybut:

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

Atrybut xdt:Transform="RemoveAttributes(debug)" określa, że atrybut debug ma zostać usunięty z system.web/compilation elementu w wdrożonym pliku Web.config . Będzie to wykonywane za każdym razem, gdy wdrożysz kompilację wydania.

Ograniczanie dostępu dziennika błędów do administratorów

Jeśli podczas uruchamiania aplikacji wystąpi błąd, aplikacja wyświetla ogólną stronę błędu zamiast strony błędu wygenerowanej przez system i używa pakietu NuGet Elmah do rejestrowania błędów i raportowania. Element customErrors w pliku Web.config aplikacji określa stronę błędu:

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

Aby wyświetlić stronę błędu, tymczasowo zmień mode atrybut customErrors elementu z "RemoteOnly" na "Włączone" i uruchom aplikację z programu Visual Studio. Przyczyna błędu przez żądanie nieprawidłowego adresu URL, takiego jak Studentsxxx.aspx. Zamiast strony błędu wygenerowanego przez usługi IIS "Nie można odnaleźć zasobu", zostanie wyświetlona strona GenericErrorPage.aspx .

Strona błędu

Aby wyświetlić dziennik błędów, zastąp wszystko w adresie URL po numerze portu elmah.axd (na przykład http://localhost:51130/elmah.axd) i naciśnij Enter:

Strona ELMAH

Nie zapomnij ustawić elementu z powrotem na tryb "RemoteOnly" po zakończeniu customErrors .

Na komputerze deweloperskim wygodnie jest zezwolić na bezpłatny dostęp do strony dziennika błędów, ale w środowisku produkcyjnym, które byłoby zagrożeniem bezpieczeństwa. W lokacji produkcyjnej chcesz dodać regułę autoryzacji, która ogranicza dostęp dziennika błędów do administratorów i aby upewnić się, że ograniczenie działa w testach i przejściowych. Dlatego jest to kolejna zmiana, którą chcesz zaimplementować za każdym razem, gdy wdrażasz kompilację wydania, a więc należy do pliku Web.Release.config .

Otwórz plik Web.Release.config i dodaj nowy location element bezpośrednio przed tagiem zamykającym configuration , jak pokazano tutaj.

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

Wartość Transform atrybutu "Wstaw" powoduje dodanie tego location elementu jako elementu równorzędnego do wszystkich istniejących location elementów w pliku Web.config . (Istnieje już jeden location element określający reguły autoryzacji dla strony Aktualizuj środki ).

Teraz możesz wyświetlić podgląd przekształcenia, aby upewnić się, że kod został poprawnie zakodowany.

W Eksplorator rozwiązań kliknij prawym przyciskiem myszy plik Web.Release.config, a następnie kliknij pozycję Przekształć w wersji zapoznawczej.

Menu Przekształcanie podglądu

Zostanie otwarta strona przedstawiająca plik Web.config programowania po lewej stronie i to, jak będzie wyglądał wdrożony plik Web.config po prawej stronie z wyróżnionymi zmianami.

Podgląd przekształcenia debugowania

Zrzut ekranu przedstawiający plik Web.config Preview z plikiem programistycznym po lewej stronie i wyglądem wdrożonego pliku po prawej stronie z wyróżnionymi zmianami.

( W wersji zapoznawczej możesz zauważyć pewne dodatkowe zmiany, dla których nie zostały zapisane przekształcenia: zazwyczaj obejmują usunięcie białych znaków, które nie mają wpływu na funkcjonalność).

Podczas testowania lokacji po wdrożeniu sprawdzisz również, czy reguła autoryzacji jest skuteczna.

Uwaga

Uwaga zabezpieczeń Nigdy nie wyświetlaj szczegółów błędu do publicznej wiadomości w aplikacji produkcyjnej lub przechowuj te informacje w lokalizacji publicznej. Osoby atakujące mogą używać informacji o błędach do odnajdywania luk w zabezpieczeniach w witrynie. Jeśli używasz rozwiązania ELMAH we własnej aplikacji, skonfiguruj aplikację ELMAH, aby zminimalizować zagrożenia bezpieczeństwa. Przykład ELMAH w tym samouczku nie powinien być uważany za zalecaną konfigurację. Jest to przykład wybrany w celu zilustrowania sposobu obsługi folderu, w ramach którego aplikacja musi mieć możliwość tworzenia plików. Aby uzyskać więcej informacji, zobacz zabezpieczanie punktu końcowego ELMAH.

Ustawienie, które będzie obsługiwane w plikach przekształcania profilu publikowania

Typowym scenariuszem jest posiadanie ustawień pliku Web.config , które muszą być inne w każdym środowisku, w którym wdrażasz. Na przykład aplikacja, która wywołuje usługę WCF, może potrzebować innego punktu końcowego w środowiskach testowych i produkcyjnych. Aplikacja Contoso University zawiera również ustawienie tego rodzaju. To ustawienie steruje widocznym wskaźnikiem na stronach witryny, które informują o tym, w którym środowisku znajdujesz się, takim jak programowanie, testowanie lub produkcja. Wartość ustawienia określa, czy aplikacja dołączy ciąg "(Dev)" lub "(Test)" do głównego nagłówka na stronie wzorcowej Site.Master :

Wskaźnik środowiska

Wskaźnik środowiska zostanie pominięty, gdy aplikacja jest uruchomiona w środowisku przejściowym lub produkcyjnym.

Strony sieci Web Contoso University odczytują wartość ustawioną w appSettings pliku Web.config w celu określenia środowiska, w którym działa aplikacja:

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

Wartość powinna być "Test" w środowisku testowym i "Prod" dla środowiska przejściowego i produkcyjnego.

Następujący kod w pliku transformacji zaimplementuje tę transformację:

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

Wartość xdt:Transform atrybutu "SetAttributes" wskazuje, że celem tej transformacji jest zmiana wartości atrybutów istniejącego elementu w pliku Web.config . Wartość xdt:Locator atrybutu "Match(key)" wskazuje, że element, który ma zostać zmodyfikowany, jest tym, którego key atrybut pasuje do atrybutu określonego key tutaj. Jedynym innym atrybutem add elementu jest value, a to, co zostanie zmienione w wdrożonym pliku Web.config . Pokazany tutaj kod powoduje value ustawienie atrybutu appSettings Environment elementu na "Test" w wdrożonym pliku Web.config.

Ta transformacja należy do plików przekształcania profilu publikowania, których jeszcze nie utworzono. Utworzysz i zaktualizujesz pliki przekształcania, które implementują tę zmianę podczas tworzenia profilów publikowania dla środowisk testowych, przejściowych i produkcyjnych. Zrobisz to we wdrożeniu w usługach IIS i wdrożysz w samouczkach produkcyjnych .

Uwaga

Ponieważ to ustawienie znajduje się w <appSettings> elemecie, istnieje inna alternatywa do określenia przekształcenia podczas wdrażania w usłudze aplikacja systemu Azure w usłudze aplikacja systemu Azure Zobacz Określanie ustawień web.config na platformie Azure we wcześniejszej części tego tematu.

Ustawianie parametrów połączenia

Mimo że domyślny plik przekształcenia zawiera przykład pokazujący sposób aktualizowania parametry połączenia, w większości przypadków nie trzeba konfigurować parametry połączenia przekształceń, ponieważ można określić parametry połączenia w profilu publikowania. Zrobisz to we wdrożeniu w usługach IIS i wdrożysz w samouczkach produkcyjnych .

Podsumowanie

Teraz wykonano tak samo, jak w przypadku przekształceń Web.config przed utworzeniem profilów publikowania, a podgląd tego, co będzie znajdować się w wdrożonym pliku Web.config.

Zrzut ekranu przedstawiający plik Web.config Preview z oryginalnym plikiem Web.config po lewej stronie i wyglądem przekształconego pliku Web.config po prawej stronie z wyróżnionymi zmianami.

W poniższym samouczku zajmiesz się zadaniami konfiguracji wdrożenia, które wymagają ustawienia właściwości projektu.

Więcej informacji

Aby uzyskać więcej informacji na temat tematów omówionych w tym samouczku, zobacz Using Web.config transformations to change settings in the destination Web.config file or app.config file during deployment in the Web Deployment Content Map for Visual Studio and ASP.NET (Używanie przekształceń Web.config w celu zmiany ustawień w docelowym pliku Web.config lub pliku app.config podczas wdrażania w mapie zawartości wdrożenia sieci Web dla programu Visual Studio i ASP.NET).