9

환경 변수 (dev/staging/production 등의 다른 환경에 해당)를 기반으로 web.config 파일에서 연결 문자열을 변경해야합니다. 다른 작업을 사용하여 다른 구성 변경을 수행하는 다른 솔루션을 보았지만 환경 변수를 기반으로 연결 문자열을 변경할 수있는 무언가를 찾을 수 없었습니다. 누구든지이 일을 할 수있는 방법을 알고 있습니까?ASP.NET의 환경 변수를 기반으로 web.config 파일 변경

답변

7

우리는 Web.config의에서 appSettings는과 connectionStrings 요소의 configSource 속성을 사용한다.

기본적으로 모든 환경 (dev, qa 및 production)에 대해 동일한 web.config 파일이 있습니다.

<?xml version="1.0"?> 
<configuration> 
    <appSettings configSource="local.appsettings.config" /> 
    <connectionStrings configSource="local.connectionstrings.config" /> 
</configuration> 

그리고 우리가 유지하고 다음 파일 :

그런 다음 우리는 Web.config의에서

... 예를 들어 ... 파일 "특정 환경"을 별도의 이용

local.appsettings.config.development 
local.appsettings.config.qa 
local.appsettings.config.production 
local.connectionstrings.config.development 
local.connectionstrings.config.qa 
local.connectionstrings.config.production 

배포 전에 모든 asp.net 응용 프로그램을 미리 컴파일하므로 CI 솔루션에서 활용하는 사용자 지정 msBuild 작업이 있습니다.이 작업은 대상 환경에 따라 올바른 구성 파일을 복사합니다 적절한 .config 파일에, 표준) ...

그래서, 우리가 dev에에 배포하는 경우, local.appsettings.config.development -> local.appsettings.config

우리는 품질에 배포하는 경우, 지역 .appsettings.config.qa -> local.appsettings.config

이렇게하면 우리의 모든 환경에서 핵심 web.config를 동일하게 유지할 수 있습니다.

+0

감사 이봐,하지만 환경 변수에 따라이 작업을 수행 할 수있는 방법이있다? 이런 식으로하고 싶습니다. 그러나 클라이언트는 각각 다른 환경에서 환경 변수를 기반으로 환경 변수를 설정하도록 요청했습니다. 그럴 경우, 그 부분을 놓치고 있습니다 (환경 변수를 보는 곳). 감사합니다. – Ryan

+1

각 환경에 대한 연결 문자열을 단일 .config 파일에 보관해야합니다. 뭔가 같은 : < "="dbString_dev "ConnectionString에 이름을 추가"/> <추가 이름 = "dbString_qa"를 ConnectionString = ""/> <추가 이름 = "dbString_prod"를 ConnectionString = "" /> 그런 다음 일종의 "구성 객체"클래스가 있다고 가정하면 환경 변수를 기반으로 올바른 문자열을 읽을 수 있습니다. * MAJOR *의 결함 계획은 .. 이제 개발자 및 생산자와 동일한 파일에 모든 프로덕션 구성 정보가 있습니다. – datacop

+0

이 방법을 App_Data 폴더의 configSource 파일과 함께 사용합니다. App_Data 폴더는 나중에 서버 환경의 구성과 혼합합니다. –

2

web.config에 두 개의 연결 문자열과 다른 변수 (예 : isTesting)가있는 경우 isTesting 값을 기반으로 사용할 연결 문자열을 선택 하시겠습니까?

0

구성 섹션을 사용할 수도 있고 섹션 간의 서버 이름 전환을 기반으로 할 수도 있습니다. 이렇게하면 같은 이름의 키를 가질 수 있습니다.

link text

관련 문제