2009-03-29 3 views
3

누구나 여러 web.config 파일을 관리하는 좋은 방법을 제안 할 수 있습니까?asp.net 여러 web.config 파일 관리

예를 들어, "localWeb.config"라는 localmachine에서 사용하는 개발 web.config를 사용하고 "prodWeb.config"라는 프로덕션에 사용할 개발 프로그램을 사용합니다. 아무도 웹 서버에서 액세스 할 수 없도록 .config 확장자를 유지합니다.

localWeb.config에는 개발 데이터베이스에 대한 연결 문자열이 있고 prodWeb.config에는 프로덕션 데이터베이스에 대한 연결 문자열이 있습니다.

현재 local.web.config 또는 prodWeb.config의 내용을 web.config로 복사하는 postbuild 이벤트를 사용하고 있습니다. 이것은 잘 작동하지만 누군가가 더 좋은 방법을 알고 있는지 궁금해하고있었습니다.

+0

난 그냥 한 파일을 가지고하는 경향이 있지만이 사이트를 업데이트 할 때의 Web.config를 업로드하지 않습니다 - 아마도 이것이 나쁜 방법입니다,하지만 난 당신이 자신을 무엇을 마이크로 소프트가하려는 생각합니다. 당신 (또는 새로운 팀원)이 우연히 그것을 업로드한다면 조금은 고통 스러울 수 있습니다 ... –

답변

2

체크 아웃 도착할 때까지이 해킹이 될 것 : 여기

그냥 도구를 사용하여 수행 할 수 작업의 몇 가지 :

  1. 콘텐츠 또는 구성이 포함 된 패키지 만들기 또는 배포 또는 공유 용 데이터베이스 다른 사람과.

  2. 응용 프로그램을 버전을 지정하거나 백업을 만드는 방법으로 패키지를 사용하십시오.

  3. 패키지를 설치하는 동안 파일의 연결 문자열이나 다른 값을 바꿀 매개 변수를 추가하십시오.

  4. 관리자가 아닌 사용자가 패키지를 배포하고 액세스 권한을 개까지 제어 할 수 있습니다.

  5. IIS 6.0 및 IIS 7.0을 실행하는 사이트와 서버를 모두 동기화하거나 마이그레이션하십시오.

1

하나의 구성 파일을 유지하고 런타임에 논리를 사용하여 사용할 구성의 하위 집합을 검색합니다. 호스트 이름이 "prodsrvr- *"이면 DB 연결을 포함하여 프로덕션 서버 구성을 사용합니다. 호스트 이름이 "test- *"이면 테스트 구성 데이터를 사용합니다. 등등.

편집 : 여기에 설명 된 코드가 있습니다.

public static string GetConnString() 
{ 
    string connString = ConfigurationSettings.AppSettings[GetConfigKey("database")]; 
    return connString; 
} 

public static string GetConfigKey(string baseKey) 
{ 
    string str = baseKey; 
    if (Dns.GetHostName().StartsWith("dinoch")) 
    { 
     str = str + "-dev"; 
    } 
    else if (Dns.GetHostName().StartsWith("prodsrvr")) 
    { 
     str = str + "-prod"; 
    } 
    return str; 
} 

<configuration> 
    <appSettings> 
    <add key="database-dev" value="server=(local)\vsdotnet;database=ASPXAPPS;Integrated Security=SSPI" /> 
    <add key="database-prod" value="server=(local)\vsdotnet;database=ASPXAPPS;Integrated Security=SSPI" /> 
    </appSettings> 
</configuration> 

간단한 "StartsWith()"를 사용하여 일부 "마법 문자열"을 하드 코드했습니다.

web.config 파일에서 정규식과 접미사의 맵을 정의하는 것을 상상해보십시오. 여기서 regex1이 호스트 이름과 일치하면 suffix1을 사용하십시오. regex2이면 suffix2를 사용하십시오. 등등.지도를 한 번로드 한 다음 정규식을 통해 열거하고 호스트 이름과 일치 하는지를 반환하는 foreach()로만로드합니다.

또는 호스트 이름 이외의 다른 테스트 서버에서 prod를 구별하기 위해 사용하려는 다른 기준이있을 수 있습니다. 그것은 당신에게 달려 있습니다.

+0

이것은 주로 나를 위해 변화하는 연결 문자열이기 때문에 제가 사용할 수있는 접근법처럼 들립니다. 어떻게/어디서 코드를 작성하는지에 대한 코드를 보여 주시겠습니까? – codette

+0

테스트 및 호스트 이름 패턴이 web.config에도있는 경우에만이 옵션을 사용할 수 있습니다. 그렇지 않으면 당신의 소스 코드에 매직 문자열이 붙어 있습니다. 이것은 일반적으로 아무런 노 (noa no)입니다. –

+0

네, 그렇습니다. 마술 문자열. – Cheeso

3

이 CodeCarnage page에 설명 된 방법이 사용자의 필요에 더 잘 맞는지 확인할 수 있습니다. configsource 속성을 사용하여 DB 및 APP 설정을 가리키고 각 설정은 환경별로 구분됩니다. 이것은 아마도 web.config에서 일관성있는 것을 유지하고 환경 설정을 다른 설정 파일에 유지하도록 허용 할 수 있습니다.