Visual Studio를 사용 하 여 ASP.NET 웹 배포: Web.config 파일 변환ASP.NET Web Deployment using Visual Studio: Web.config File Transformations

만든 사람 Tom Dykstraby Tom Dykstra

시작 프로젝트 다운로드Download Starter Project

이 자습서 시리즈에서는 Visual Studio 2012 또는 Visual Studio 2010를 사용 하 여 Azure App Service Web Apps 또는 타사 호스팅 공급자에 게 ASP.NET 웹 응용 프로그램을 배포 (게시) 하는 방법을 보여 줍니다.This tutorial series shows you how to deploy (publish) an ASP.NET web application to Azure App Service Web Apps or to a third-party hosting provider, by using Visual Studio 2012 or Visual Studio 2010. 계열에 대 한 자세한 내용은 시리즈의 첫 번째 자습서를 참조 하십시오.For information about the series, see the first tutorial in the series.

개요Overview

이 자습서에서는 다른 대상 환경에 배포할 때 Web.config 파일을 변경 하는 프로세스를 자동화 하는 방법을 보여 줍니다.This tutorial shows you how to automate the process of changing the Web.config file when you deploy it to different destination environments. 응용 프로그램을 배포할 때는 대부분의 응용 프로그램에 Web.config 파일의 설정이 달라 야 합니다.Most applications have settings in the Web.config file that must be different when the application is deployed. 이러한 변경을 수행 하는 프로세스를 자동화 하면 배포할 때마다 수동으로 작업을 수행할 필요가 없으며,이는 지루한 오류가 발생 하기 쉽습니다.Automating the process of making these changes keeps you from having to do them manually every time you deploy, which would be tedious and error prone.

미리 알림: 자습서를 진행할 때 오류 메시지가 표시 되거나 문제가 해결 되지 않으면 문제 해결 페이지를 확인 해야 합니다.Reminder: If you get an error message or something doesn't work as you go through the tutorial, be sure to check the troubleshooting page.

Web.config 변환과 웹 배포 매개 변수 비교Web.config transformations versus Web Deploy parameters

Web.config 파일 설정을 변경 하는 프로세스를 자동화 하는 방법에는 Web.config 변환과 웹 배포 매개 변수등 두 가지가 있습니다.There are two ways to automate the process of changing Web.config file settings: Web.config transformations and Web Deploy parameters. Web.config 변환 파일은 배포할 때 Web.config 파일을 변경 하는 방법을 지정 하는 XML 태그를 포함 합니다.A Web.config transformation file contains XML markup that specifies how to change the Web.config file when it is deployed. 특정 빌드 구성과 특정 게시 프로필에 대해 서로 다른 변경 내용을 지정할 수 있습니다.You can specify different changes for specific build configurations and for specific publish profiles. 기본 빌드 구성은 디버그 및 릴리스 이며 사용자 지정 빌드 구성을 만들 수 있습니다.The default build configurations are Debug and Release, and you can create custom build configurations. 게시 프로필은 일반적으로 대상 환경에 해당 합니다.A publish profile typically corresponds to a destination environment. ( 테스트 환경으로 IIS에 배포 자습서에서 게시 프로필에 대해 자세히 알아봅니다.)(You'll learn more about publish profiles in the Deploying to IIS as a Test Environment tutorial.)

웹 배포 매개 변수는 Web.config 파일에 있는 설정을 포함 하 여 배포 중에 구성 해야 하는 다양 한 종류의 설정을 지정 하는 데 사용할 수 있습니다.Web Deploy parameters can be used to specify many different kinds of settings that must be configured during deployment, including settings that are found in Web.config files. Web.config 파일 변경 내용을 지정 하는 데 사용 하는 경우 웹 배포 매개 변수는 설정 하기 더 복잡 하지만, 배포할 때까지 설정할 값을 알 수 없는 경우에 유용 합니다.When used to specify Web.config file changes, Web Deploy parameters are more complex to set up, but they are useful when you do not know the value to be set until you deploy. 예를 들어 엔터프라이즈 환경에서 배포 패키지 를 만들어 it 부서의 사용자에 게 제공 하 여 프로덕션 환경에 설치할 수 있으며, 사용자가 알지 못하는 연결 문자열이 나 암호를 입력할 수 있어야 합니다.For example, in an enterprise environment, you might create a deployment package and give it to a person in the IT department to install in production, and that person has to be able to enter connection strings or passwords that you do not know.

이 자습서 시리즈에 포함 된 시나리오에서는 Web.config 파일에 대해 수행 해야 하는 모든 것을 미리 알고 있으므로 웹 배포 매개 변수를 사용할 필요가 없습니다.For the scenario that this tutorial series covers, you know in advance everything that has to be done to the Web.config file, so you do not need to use Web Deploy parameters. 사용 되는 빌드 구성에 따라 다르고 사용 되는 게시 프로필에 따라 달라 지는 일부 변환을 구성 합니다.You'll configure some transformations that differ depending on the build configuration used, and some that differ depending on the publish profile used.

Azure에서 Web.config 설정 지정Specifying Web.config settings in Azure

변경 하려는 Web.config 파일 설정이 <connectionStrings> 또는 <appSettings> 요소에 있고 Web Apps를 Azure App Service에 배포 하는 경우 배포 중에 변경 내용을 자동화 하는 또 다른 옵션이 있습니다.If the Web.config file settings that you want to change are in the <connectionStrings> or the <appSettings> element, and if you are deploying to Web Apps in Azure App Service, you have another option for automating changes during deployment. 웹 앱에 대 한 관리 포털 페이지의 구성 탭에서 Azure에 적용 하려는 설정을 입력할 수 있습니다 ( 앱 설정연결 문자열 섹션까지 아래로 스크롤).You can enter the settings that you want to take effect in Azure in the Configure tab of the management portal page for your web app (scroll down to the app settings and connection strings sections). 프로젝트를 배포 하면 Azure에서 변경 내용을 자동으로 적용 합니다.When you deploy the project, Azure automatically applies the changes. 자세한 내용은 Windows Azure 웹 사이트: 응용 프로그램 문자열 및 연결 문자열 작동 방식을 참조 하세요.For more information, see Windows Azure Web Sites: How Application Strings and Connection Strings Work.

기본 변환 파일Default transformation files

솔루션 탐색기에서 Web.config 를 확장 하 여 두 기본 빌드 구성에 대해 기본적으로 생성 되는 Web.Debug.configWeb.Release.config 변환 파일을 볼 수 있습니다.In Solution Explorer, expand Web.config to see the Web.Debug.config and Web.Release.config transformation files that are created by default for the two default build configurations.

Web.config_transform_files

Web.config 파일을 마우스 오른쪽 단추로 클릭 하 고 상황에 맞는 메뉴에서 구성 변환 추가 를 선택 하 여 사용자 지정 빌드 구성에 대 한 변환 파일을 만들 수 있습니다.You can create transformation files for custom build configurations by right-clicking the Web.config file and choosing Add Config Transforms from the context menu. 이 자습서에서는 사용자 지정 빌드 구성을 만들지 않았기 때문에이 작업을 수행할 필요가 없으며 메뉴 옵션을 사용할 수 없습니다.For this tutorial you don't need to do that, and the menu option is disabled, because you haven't created any custom build configurations.

나중에 테스트, 준비 및 프로덕션 게시 프로필에 대해 각각 하나씩 세 개의 변환 파일을 만듭니다.Later you'll create three more transformation files, one each for the test, staging, and production publish profiles. 게시 프로필 변환 파일에서 처리 하는 설정의 일반적인 예는 대상 환경에 따라 달라 지기 때문에 테스트 및 프로덕션에 대해 다른 WCF 끝점입니다.A typical example of a setting that you would handle in a publish profile transformation file because it depends on the destination environment is a WCF endpoint that is different for test versus production. 이후 자습서에서 게시 프로필을 만든 후 게시 프로필 변환 파일을 만듭니다.You'll create publish profile transformation files in later tutorials after you create the publish profiles that they go with.

디버그 모드 사용 안 함Disable debug mode

대상 환경이 아닌 빌드 구성에 따라 달라 지는 설정의 예로는 debug 특성이 있습니다.An example of a setting that depends on build configuration rather than destination environment is the debug attribute. 릴리스 빌드의 경우 배포 하는 환경에 관계 없이 디버깅을 사용 하지 않도록 설정 하는 것이 좋습니다.For a Release build, you typically want debugging disabled regardless of which environment you are deploying to. 따라서 기본적으로 Visual Studio 프로젝트 템플릿은 요소에서 특성을 제거 하는 코드를 사용 하 여 Web.Release.config 변환 파일을 만듭니다 debug compilation .Therefore, by default the Visual Studio project templates create Web.Release.config transform files with code that removes the debug attribute from the compilation element. 다음은 기본 Web.Release.config입니다. 주석 처리 된 일부 샘플 변환 코드 외에도 compilation 특성을 제거 하는 요소에 코드를 포함 합니다 debug .Here is the default Web.Release.config: in addition to some sample transformation code that is commented out, it includes code in the compilation element that removes the debug attribute:

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

xdt:Transform="RemoveAttributes(debug)"특성은 debug 배포 된 system.web/compilation Web.config 파일의 요소에서 특성을 제거 하도록 지정 합니다.The xdt:Transform="RemoveAttributes(debug)" attribute specifies that you want the debug attribute to be removed from the system.web/compilation element in the deployed Web.config file. 이 작업은 릴리스 빌드를 배포할 때마다 수행 됩니다.This will be done every time you deploy a Release build.

관리자에 대 한 오류 로그 액세스 제한Limit error log access to administrators

응용 프로그램을 실행 하는 동안 오류가 발생 하는 경우 응용 프로그램은 시스템 생성 오류 페이지 대신 일반 오류 페이지를 표시 하 고 오류 로깅 및 보고를 위해 Elmah NuGet 패키지 를 사용 합니다.If there's an error while the application runs, the application displays a generic error page in place of the system-generated error page, and it uses the Elmah NuGet package for error logging and reporting. customErrors응용 프로그램 Web.config 파일의 요소는 오류 페이지를 지정 합니다.The customErrors element in the application Web.config file specifies the error page:

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

오류 페이지를 보려면 mode 요소의 특성을 customErrors "RemoteOnly"에서 "On"으로 일시적으로 변경 하 고 Visual Studio에서 응용 프로그램을 실행 합니다.To see the error page, temporarily change the mode attribute of the customErrors element from "RemoteOnly" to "On" and run the application from Visual Studio. Studentsxxx와 같은 잘못 된 URL을 요청 하 여 오류를 발생 시킵니다.Cause an error by requesting an invalid URL, such as Studentsxxx.aspx. IIS에서 생성 된 "리소스를 찾을 수 없습니다" 오류 페이지 대신 Genericerrorpage .aspx 페이지가 표시 됩니다.Instead of an IIS-generated "The resource cannot be found" error page, you see the GenericErrorPage.aspx page.

오류 페이지

오류 로그를 보려면 URL에서 포트 번호 뒤에 있는 모든 항목을 elmah (예 http://localhost:51130/elmah.axd :)로 바꾸고 enter 키를 누릅니다.To see the error log, replace everything in the URL after the port number with elmah.axd (for example, http://localhost:51130/elmah.axd) and press Enter:

ELMAH 페이지

customErrors완료 되 면 요소를 다시 "RemoteOnly" 모드로 설정 해야 합니다.Don't forget to set the customErrors element back to "RemoteOnly" mode when you're done.

개발 컴퓨터에서는 오류 로그 페이지에 대 한 무료 액세스를 허용 하는 것이 편리 하지만 프로덕션 환경에서는 보안상 위험할 수 있습니다.On your development computer it's convenient to allow free access to the error log page, but in production that would be a security risk. 프로덕션 사이트의 경우에는 관리자에 게 오류 로그 액세스를 제한 하는 권한 부여 규칙을 추가 하 고 테스트 및 스테이징에도 제한이 적용 되도록 할 수 있습니다.For the production site, you want to add an authorization rule that restricts error log access to administrators, and to make sure that the restriction works you want it in test and staging also. 따라서이는 릴리스 빌드를 배포할 때마다 구현 하려는 다른 변경 내용으로, Web.Release.config 파일에 속합니다.Therefore this is another change that you want to implement every time you deploy a Release build, and so it belongs in the Web.Release.config file.

여기 Web.Release.configlocation 표시 된 것 처럼Web.Release.config을 열고 닫는 태그 바로 앞에 새 요소를 추가 합니다 configuration .Open Web.Release.config and add a new location element immediately before the closing configuration tag, as shown here.

<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"Insert"의 특성 값으로 인해이 location 요소가 location Web.config 파일의 기존 요소에 형제로 추가 됩니다.The Transform attribute value of "Insert" causes this location element to be added as a sibling to any existing location elements in the Web.config file. ( location 크레딧 업데이트 페이지에 대 한 권한 부여 규칙을 지정 하는 요소가 이미 하나 있습니다.)(There is already one location element that specifies authorization rules for the Update Credits page.)

이제 변환을 미리 보고 올바르게 코딩 되었는지 확인할 수 있습니다.Now you can preview the transform to make sure that you coded it correctly.

솔루션 탐색기에서 Web.Release.config 를 마우스 오른쪽 단추로 클릭 하 고 변환 미리 보기를 클릭 합니다.In Solution Explorer, right-click Web.Release.config and click Preview Transform.

변환 메뉴 미리 보기

왼쪽에 개발 Web.config 파일이 표시 되 고, 배포 된 Web.config 파일이 오른쪽에 표시 되 고 변경 내용이 강조 표시 되는 페이지가 열립니다.A page opens that shows you the development Web.config file on the left and what the deployed Web.config file will look like on the right, with changes highlighted.

디버그 변환 미리 보기

위치 변환 미리 보기

(미리 보기에는 변환을 작성 하지 않은 몇 가지 추가 변경 내용이 표시 될 수 있습니다. 일반적으로이는 기능에 영향을 주지 않는 공백 제거를 포함 합니다.)( In the preview, you might notice some additional changes that you didn't write transforms for: these typically involve the removal of white space that doesn't affect functionality.)

배포 후에 사이트를 테스트 하는 경우에도 테스트 하 여 권한 부여 규칙이 적용 되는지 확인 합니다.When you test the site after deployment, you'll also test to verify that the authorization rule is effective.

Note

보안 정보 프로덕션 응용 프로그램에서 오류 정보를 공용에 표시 하지 않거나 해당 정보를 공용 위치에 저장 합니다.Security Note Never display error details to the public in a production application, or store that information in a public location. 공격자는 오류 정보를 사용 하 여 사이트의 취약성을 검색할 수 있습니다.Attackers can use error information to discover vulnerabilities in a site. 사용자 고유의 응용 프로그램에서 ELMAH를 사용 하는 경우 보안 위험을 최소화 하도록 ELMAH를 구성 합니다.If you use ELMAH in your own application, configure ELMAH to minimize security risks. 이 자습서의 ELMAH 예제는 권장 구성으로 간주 되지 않아야 합니다.The ELMAH example in this tutorial should not be considered a recommended configuration. 응용 프로그램에서 파일을 만들 수 있어야 하는 폴더를 처리 하는 방법을 설명 하기 위해 선택한 예제입니다.It is an example that was chosen in order to illustrate how to handle a folder that the application must be able to create files in. 자세한 내용은 ELMAH 끝점 보안을 참조 하세요.For more information, see securing the ELMAH endpoint.

게시 프로필 변환 파일에서 처리할 설정A setting that you'll handle in publish profile transformation files

일반적인 시나리오는에 배포 하는 각 환경에서 Web.config 파일 설정이 달라 야 하는 것입니다.A common scenario is to have Web.config file settings that must be different in each environment that you deploy to. 예를 들어 WCF 서비스를 호출 하는 응용 프로그램은 테스트 및 프로덕션 환경에서 다른 끝점을 필요로 할 수 있습니다.For example, an application that calls a WCF service might need a different endpoint in test and production environments. Contoso 대학 응용 프로그램에는 이러한 종류의 설정도 포함 되어 있습니다.The Contoso University application includes a setting of this kind also. 이 설정은 현재 개발, 테스트 또는 프로덕션 환경과 같은 환경을 알려 주는 사이트 페이지에서 표시 되는 표시기를 제어 합니다.This setting controls a visible indicator on a site's pages that tells you which environment you are in, such as development, test, or production. 설정 값은 응용 프로그램이 사이트의 주 제목에 "(Dev)" 또는 "(Test)"를 추가할지 여부를 결정 합니다 . 마스터 마스터 페이지:The setting value determines whether the application will append "(Dev)" or "(Test)" to the main heading in the Site.Master master page:

환경 표시기

응용 프로그램을 스테이징 또는 프로덕션 환경에서 실행 하는 경우 환경 표시기가 생략 됩니다.The environment indicator is omitted when the application is running in staging or production.

Contoso 대학 웹 페이지는 appSettings 응용 프로그램이 실행 되는 환경을 확인 하기 위해 Web.config 파일의에 설정 된 값을 읽습니다.The Contoso University web pages read a value that is set in appSettings in the Web.config file in order to determine what environment the application is running in:

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

값은 테스트 환경에서 "Test"로, 스테이징 및 프로덕션의 경우 "Prod" 여야 합니다.The value should be "Test" in the test environment, and "Prod" for staging and production.

변환 파일의 다음 코드는이 변환을 구현 합니다.The following code in a transform file will implement this transformation:

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

xdt:Transform특성 값 "SetAttributes"는이 변환의 목적이 Web.config 파일의 기존 요소에 대 한 특성 값을 변경 하는 것을 나타냅니다.The xdt:Transform attribute value "SetAttributes" indicates that the purpose of this transform is to change attribute values of an existing element in the Web.config file. xdt:Locator특성 값 "Match (key)"는 수정할 요소가 key key 여기에 지정 된 특성과 일치 하는 특성을 갖는 것을 나타냅니다.The xdt:Locator attribute value "Match(key)" indicates that the element to be modified is the one whose key attribute matches the key attribute specified here. 요소의 다른 특성은 이며 add value 배포 된 Web.config 파일에서 변경 됩니다.The only other attribute of the add element is value, and that is what will be changed in the deployed Web.config file. 여기에 표시 된 코드는 value Environment appSettings 배포 된 Web.config 파일에서 요소의 특성을 "Test"로 설정 합니다.The code shown here causes the value attribute of the Environment appSettings element to be set to "Test" in the Web.config file that is deployed.

이 변환은 아직 만들지 않은 게시 프로필 변환 파일에 속합니다.This transform belongs in the publish profile transform files, which you haven't created yet. 테스트, 스테이징 및 프로덕션 환경에 대 한 게시 프로필을 만들 때이 변경 내용을 구현 하는 변환 파일을 만들고 업데이트 합니다.You'll create and update the transform files that implement this change when you create the publish profiles for the test, staging, and production environments. IIS에 배포프로덕션에 배포 자습서에서이 작업을 수행 합니다.You'll do that in the deploy to IIS and deploy to production tutorials.

Note

이 설정이 요소에 있기 때문 <appSettings> 에이 항목의 앞부분에 나오는 Azure에서 Web.config 설정 지정 을 참조 Azure App Service Web Apps 배포 하는 경우 변환을 지정 하는 또 다른 대안이 있습니다.Because this setting is in the <appSettings> element, you have another alternative for specifying the transformation when you're deploying to Web Apps in Azure App Service See Specifying Web.config settings in Azure earlier in this topic.

연결 문자열 설정Setting connection strings

기본 변환 파일에는 연결 문자열을 업데이트 하는 방법을 보여 주는 예제가 포함 되어 있지만, 대부분의 경우에는 게시 프로필에서 연결 문자열을 지정할 수 있으므로 연결 문자열 변환을 설정할 필요가 없습니다.Although the default transform file contains an example that shows how to update a connection string, in most cases you do not need to set up connection string transformations, because you can specify connection strings in the publish profile. IIS에 배포프로덕션에 배포 자습서에서이 작업을 수행 합니다.You'll do that in the deploy to IIS and deploy to production tutorials.

요약Summary

이제 게시 프로필을 만들기 전에 Web.config 변환에 대해 수행할 수 있는 작업을 완료 했으며 배포 된 Web.config 파일에 포함 될 항목의 미리 보기를 살펴보았습니다.You have now done as much as you can with Web.config transformations before you create the publish profiles, and you've seen a preview of what will be in the deployed Web.config file.

위치 변환 미리 보기

다음 자습서에서는 프로젝트 속성을 설정 해야 하는 배포 설정 작업을 처리 합니다.In the following tutorial, you'll take care of deployment set-up tasks that require setting project properties.

추가 정보More Information

이 자습서에서 설명 하는 항목에 대 한 자세한 내용은 Visual Studio 및 ASP.NET 용 웹 배포 콘텐츠 맵에서 배포 하는 동안 Web.config 변환을 사용 하 여 대상 Web.config 파일 또는 app.config 파일의 설정 변경을 참조 하세요.For more information about topics covered by this tutorial, see 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.