How to use the Web.config Transform File

2011. 2. 17. 02:32Others

Transfrom Web.config when deploying a web application project

Web Project Deployment 작업을 진행할 때, 대부분의 경우 Web.config에 있는 특정한 값을 환경에 따라 바꾸어주는 작업을 진행하게 됩니다. 예를 들어서 DB ConnectionString변경, Debug Mode 등의 값들은 호스팅 할 때와 개발할 때 값을 다르게 설정해서 쓰는게 대부분입니다. 여기에서는 Transform File를 이용해서 Deployment과정에 자동으로 Web.config값이 변경되도록 하는 방법을 안내드릴 것입니다.

Creating and coding a transform file

Web.config의 특정 값이 자동으로 Deployment 과정에 바뀌도록 하기 위해서는 Transform File를 작성해야 합니다. 이 파일은 Build Configuration과 연관이 있습니다. 기본적으로 Build Configuration에는 Debug, Release Mode가 설정되는데, 마찬가지로 Web.config에도 Debug와 Release Mode용 Trnasform File가 기본적으로 생성됩니다. 물론 직접 Build Configuration과 상응하는 Transform File를 생성할 수 있습니다.

  1. 기본적으로 생성되는 Debug, Release가 아닌 다른 Transform File를 생성하기 위해서는, 먼저 해당 Build Configuration을 먼저 생성해야 합니다.
    Menu의 Build에 존재하는 Configuration Manager를 실행하여 Build Configuration을 새로 생성하실 수 있습니다.
  2. Solution Explorer에서 Web.config에 +아이콘이 존재한다면 이미 Transform File가 생성되어있다는 의미입니다. +아이콘을 누르면 각 Transform File가 나타납니다.
    Transform File Name는 Configuration Manager에 설정되어 있는 Build Configuration Name과 Web.Config 파일명이 조합되어 나타납니다. 예를 들어 Debug와 Release Build Configuration의 Transform File Name는 Web.debug.config, Web.release.config입니다.
  3. 만약 Build Configuration에 해당하는 Transform File이 없으면 Web.config를 마우스 우 클릭하시고 Add Config Transforms를 클릭 하십시요.
  4. Build Configuration에 실행될 해당하는 Transform File를 열고 변경 규칙을 작성하시면, 해당 Build Configuration으로 Build가 진행될 때 자동으로 Web.config파일은 Transform File에 명명된 규칙대로 변경될 것입니다. 이 작성 규칙은 잠시 후에 다루겠습니다.

How to:Disable Web.config Transformation

Transform File를 설정해두면 Deployment 작업을 진행 할 때 자동으로 Web.config가 변경되도록 할 수 있습니다. 하지만, Transform File이 적용되지 말아야 할 예외상황에 직면할 때가 있습니다. 예를 들어 호스팅 하고 있는 Application에 문제가 발생했고, 잠시나마 문제를 급히 수정하고 Debug Mode를 True로 설정하여 문제가 발생하는지 지속적으로 확인하고 추적해야 한다고 할 때가 있을 것입니다.

만약 Web.confg Transformation 기능을 중지하고 싶다면 아래와 같은 방법을 사용할 수 있습니다.

  1. Transform File를 열고 해당 코드를 주석 처리합니다. 가장 간단하고 언제든지 복구할 수 있는 방법입니다.
  2. Transform File명을 Build Configuration Name과 다르게 설정합니다. 이 값의 설정은 Visual Studio가 아닌 Window Explorer상에서 진행해야 합니다. Web.release.config를 Web.release_x.config로 설정하면 Release Build Configuration으로 Deployment를 진행할 때 해당 Transformation이 실행되지 않을 뿐 별 문제는 없습니다.
  3. Transform File를 삭제를 하는 방법도 있습니다. 단 복구가 불가능함에 유의 하십시요.
  4. Project File을 열고 TransformWebConfigEnabled Element의 값을 false로 설정함으로써 Transform File가 실행되지 않게 할 수 있습니다.(Project File란 .csproj, .vbproj 을 말합니다.) Project File를 직접 수정하면 Visual Studio GUI 환경에서 할 수 없는 다채로운 설정을 추가할 수 있습니다. 예를 들어 Auto Delpoy의 Connection Stirng 자동 변경 서비스를 AutoParameterizationWebConfigConnectionString Elemnt 값을 설정함으로써 동작하거나 동작하지 않게 제어하실 수 있습니다. 
    1. Project File를 편집기로 엽니다. Solution Explorer에서 해당 Project를 마우스 우 클릭으로 선택하고, Unload Project를 해당 Project에 실행합니다. 다시 마우스 우 클릭하시면 Edit를 통해 수정할 수 있습니다.(Window Explorer 상에서 직접 여셔도 됩니다.)
    2. 수정하고자 하는 Build Configuration의 값을 담고 있는 PropertyGroup Element를 찾습니다.
    3. 해당 PropertGroup Element의 하위에 AutoParameterizationWebConfigConnectionStrings Element와 TransformWebConfigEnabled Element가 설정하려는 값을 가진 채로 위치하도록 합니다. 예를 들어 Debug Build Configuration의 Web.confg Transformation기능을 끄려면 아래와 같이 작성하십시요.
      <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
          <TransformWebConfigEnabled>False</TransformWebConfigEnabled>
          <AutoParameterizationWebConfigConnectionString>False</AutoParameterizationWebConfigConnectionString>
          <DebugSymbols>true</DebugSymbols>
          <DebugType>full</DebugType>
          <Optimize>false</Optimize>
          <OutputPath>bin\</OutputPath>
          <DefineConstants>DEBUG;TRACE</DefineConstants>
          <ErrorReport>prompt</ErrorReport>
          <WarningLevel>4</WarningLevel>
      </PropertyGroup>
    4. 수정한 파일을 저장하고, 해당 Project를 마우스 우 클릭 선택하여, Reload Project를 클릭하시면 변경사항이 적용된 체로 프로젝트가 읽혀집니다.

Web.config Transformation 문법은 다음 포스트에서 다루도록 하겠습니다.