개발 및 프로덕션 환경에서 다른 Web.config 사용


194

개발 또는 프로덕션 환경에서 실행되는 ASP.NET 응용 프로그램에서 다른 데이터베이스 연결 문자열과 SMTP 서버 주소를 사용해야합니다.

응용 프로그램은 WebConfigurationManager.AppSettings 속성을 통해 Web.config 파일에서 설정을 읽습니다 .

Build / Publish 명령을 사용하여 FTP를 통해 응용 프로그램을 프로덕션 서버에 배포 한 다음 원격 Web.config를 올바른 것으로 수동으로 바꿉니다.

어떻게 든 배포 프로세스를 단순화 할 수 있습니까? 감사!

답변:


159

Visual Studio 2010 이상에서는 빌드 구성에 따라 web.config에 변환을 적용 할 수 있습니다.

web.config를 작성할 때 솔루션 탐색기에서 파일을 펼치면 두 개의 파일이 표시됩니다.

  • Web.Debug.Config
  • Web.Release.Config

여기에는 사용할 수있는 변환 코드가 포함되어 있습니다.

  • 연결 문자열 변경
  • 디버깅 추적 및 설정 제거
  • 오류 페이지 등록

자세한 내용 은 MSDN의 웹 응용 프로그램 프로젝트 배포위한 Web.config 변환 구문 을 참조하십시오.

공식적으로 지원되지는 않지만 동일한 유형의 변환을 웹 이외의 응용 프로그램 app.config파일에 적용 할 수도 있습니다. msbuild에 새 작업을 추가하기 위해 프로젝트 파일을 수정하는 방법에 대해서는 Phil Bolduc 블로그를 참조하십시오 .

이것은 Visual Studio Uservoice에 대한 오래 견딘 요청입니다 .

비주얼 스튜디오 2010 연장 위, " SlowCheetah는 "어떤 설정 파일 변환을 만드는 돌봐 사용할 수 있습니다. Visual Studio 2017.3부터 SlowCheetah가 IDE에 통합 되었으며 Microsoft에서 코드베이스를 관리하고 있습니다. 이 새 버전은 JSON 변환도 지원합니다.


7
이전 웹 사이트 프로젝트 에서는 작동하지 않습니다 . 웹 응용 프로그램 에만 해당 됩니다 . Phil Bolduc의 대안이 웹 사이트에서 작동하는지 확인하려고 시도하지 않았지만 프로젝트 파일이 없기 때문에 그렇지 않을 것으로 의심됩니다.
mo.

13
또한 web.confg는 게시 용으로 만 작동하며 F5를 빌드 / 실행하면 작동하지 않습니다. (((((
Alex

7
당신의 Web.config에 포함되지 않은 경우 Web.Debug.ConfigWeb.Release.Config, 당신은 마우스 오른쪽 버튼을 클릭해야 할 수도 있습니다 Web.Config를 클릭합니다 Add Config Transforms.
Doug S

1
@Alex : 간단한 빌드 / F5에 어떻게 사용할 수 있습니까?
punter

1
SlowCheetah로 직접 연결 : marketplace.visualstudio.com/…
Xiao

83

<appSettings>web.config 의 태그는 자체 키 / 값 세트로 외부 구성을로드하는 파일 속성을 지원합니다. 이것들은 web.config에있는 모든 설정을 무시하거나 추가합니다.

설치시 사이트가 설치되는 환경과 일치하는 파일 속성으로 web.config를 수정하여이를 활용합니다. 설치 프로그램의 스위치를 사용하여이 작업을 수행합니다.

예를 들어;

<appSettings file=".\EnvironmentSpecificConfigurations\dev.config">

<appSettings file=".\EnvironmentSpecificConfigurations\qa.config">

<appSettings file=".\EnvironmentSpecificConfigurations\production.config">

노트 :

  • 속성으로 지정된 .config를 변경해도 asp.net 작업자 프로세스가 다시 시작되지 않습니다.

2
이는 특히 환경이 많고 일부 환경에 대한 일부 설정에 암호가 있고 소스 제어에서 추적하지 않으려는 유사한 암호가있는 경우 특히 유용합니다.
Phil

1
파일 경로를 동적으로 변경하는 방법이 있습니까? 어떤 서버를 사용하고 있습니까? 이것은 웹 응용 프로그램이 아닌 오래된 웹 사이트 프로젝트에서 작동하고 있습니다. 감사합니다!
관점

2
restartOnExternalChanges해당 파일을 마치 web.configs처럼 취급 하는 속성 이 있습니다. 출처 : learnable.com/books/…
David Schwartz


13

나도 알고 싶다. 이것은 나를 위해 문제를 격리하는 데 도움이됩니다.

<connectionStrings configSource = "connectionStrings.config"/>

그런 다음 connectionStrings.config 및 "{host} connectionStrings.config"를 유지합니다. 여전히 문제이지만 두 환경에서 다른 섹션에 대해이 작업을 수행하면 동일한 web.config를 배포하고 버전을 지정할 수 있습니다.

(그리고 나는 VS를 사용하지 않는다.)


VS를 사용하는 경우 prebuild-events를 사용하여 다음과 같이 debug.connectionstrings.config 또는 release.connectionstrings.config에서 복사 할 수 있습니다. copy $ (ProjectDir) $ (ConfigurationName) ConnectionStrings.config $ (ProjectDir) ConnectionStrings.config 제안대로 스캇. Hanselmann : hanselman.com/blog/…
Thomas

6

NAnt Build Script를 사용하여 다른 환경에 배포합니다. 배포 위치에 따라 XPath를 통해 구성 파일을 수정 한 다음 Beyond Compare을 사용하여 자동으로 해당 환경에 배치합니다 .

설정하는 데 1 ~ 2 분이 걸리지 만 한 번만 수행하면됩니다. 그런 다음 커피 한 잔 더 마시면서 배치 파일이 이어집니다. :)

여기 내가 찾은 기사가 있습니다.


5

4 가지 환경 (개발, 테스트, 스테이징 및 프로덕션)이있는 하나의 프로젝트에서 애플리케이션이 배치 된 머신 이름에 따라 적절한 구성을 선택하는 시스템을 개발했습니다.

이것은 다음과 같은 이유로 우리에게 효과적이었습니다.

  • 관리자는 개발자를 필요로하지 않고 (필요한) 구성 파일을 싫어하지 않고도 응용 프로그램을 배포 할 수 있습니다.
  • 기계 이름은 규칙을 준수했습니다. 정규식을 사용하여 이름을 일치시키고 환경의 여러 시스템에 배포했습니다. 과
  • 우리는 연결 문자열에 통합 보안을 사용했습니다. 즉, 디자인 타임에 비밀번호를 공개하지 않고 구성 파일에 계정 이름을 유지할 수 있습니다.

이 경우에는 우리에게 잘 작동했지만 아마도 모든 곳에서 작동하지 않을 것입니다.


3

엔터프라이즈 라이브러리 구성 편집기가이를 도와줍니다. 기본 구성 파일을 작성한 다음 각 환경에 대한 델타를 작성할 수 있습니다. 그런 다음 기본 구성과 델타를 병합하여 환경 별 web.config를 작성할 수 있습니다. 내가 할 수있는 것보다 더 나은 정보를 제공하는 여기 의 정보를 살펴보십시오 .


3

빌드 후 단계로 만들 수도 있습니다. 디버그 및 릴리스 외에 "배치"인 새 구성을 설정 한 후 빌드 후 단계에서 올바른 web.config를 복사하십시오.

우리는 모든 프로젝트에 자동화 된 빌드를 사용하며, 빌드 스크립트는 올바른 위치를 가리 키도록 web.config 파일을 업데이트합니다. 그러나 VS에서 모든 것을하고 있다면 도움이되지 않습니다.


3

이것은 machine.config 사용의 큰 이점 중 하나입니다. 마지막 직장에서 우리는 개발, 테스트 및 프로덕션 환경을 가졌습니다. 연결 문자열 (적절한 dev / test / prod SQL 머신에)과 같은 것에 machine.config를 사용할 수 있습니다.

실제 프로덕션 시스템에 액세스 할 수없는 경우 (예 : 공유 호스트에서 호스팅 회사를 사용하는 경우)이 방법이 적합하지 않을 수 있습니다.


1

확장 "Configuration Transform"을 사용하면 "SlowCheetah"와 동일하게 작동합니다.


예, 컴파일이 아닌 배포에서만 작동합니다. 다른 구성 변환 환경을 사용하여 간단히 컴파일하고 디버깅 할 수 있기를 바랍니다.
Ch'nycos
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.