2009-12-18 4 views
2

app.config에서 ConnectionString을 재정의하는 방법이 있습니까? 우리의 빌드 시스템은 고객의 서버에서도 실행되지만 connectionString은 달라야합니다. app.config가 svn에 있기 때문에 app.config에서 뭔가를 변경하고 커밋 할 때마다 고객의 서버로 이동하여 connectionString을 해당 데이터베이스로 다시 변경해야합니다.app.config (또는 web.config)의 ConnectionString 재정의

ant- 스크립트 예를 들어,이 문제는 없지만 app.config에서 나는 길을 찾을 수없는 것 같습니다. 예를 들어이 시도 :

<connectionStrings configSource="WebConnectionString.config"> 
    <add name="ConnectionString" 
    connectionString="..." 
    providerName="System.Data.SqlClient"/> 
</connectionStrings> 

가 난 할 노력하고있어 것은 WebConnectionString.config가있는 경우, 그 설정 파일에 ConnectionString을 사용하는 것이있다. 그렇지 않은 경우 코드 샘플에 정의 된 것을 사용하십시오 (so, app.config).

답변

2

다음과 같이하면 연결 문자열 검색을 캡슐화하는 클래스를 만들 수 있습니다. 이

public static class ConnectionStringBuilder 
    { 
     const string ConnStringDefault = @"defaultConnString"; 
     static readonly string _connString = string.Empty; 
     public static string Build() 
     { 
      return _connString; 
     } 

     /// <summary> 
     /// Builds connection string from the config file with the given name 
     /// </summary> 
     /// <param name="name">The name.</param> 
     /// <returns></returns> 
     public static string Build(string name) 
     { 
      if (ConfigurationManager.ConnectionStrings[name] != null) 
       return ConfigurationManager.ConnectionStrings[name].ConnectionString; 

      throw new ArgumentException("Connectionstring with given name '" + name +"' not found! ", "name"); 
     } 

     /// <summary> 
     /// Initializes the <see cref="ConnectionStringBuilder"/> class. 
     /// </summary> 
     static ConnectionStringBuilder() 
     { 

      if (ConfigurationManager.ConnectionStrings["default"] != null) 
      { 
       log.Info("conn string in config found"); 
       _connString = ConfigurationManager.ConnectionStrings["default"].ConnectionString; 
      } 
      else 
      { 
       log.Info("no default connection string found, using test connection string"); 
       _connString = ConnStringDefault; 
      } 
     } 
    } 

및 사용 등의

뭔가 내가은 Machine.config 내 연결 문자열을 움직일 것입니다

0

빌드를 수행 할 때 SVN 구성을 프로덕션 구성으로 바꾸고 상태를 불문하고 모든 응용 프로그램을 기반으로 전체 웹 서비스를 연결 문자열로 변경하여 정확한 웹 서비스를 가져 오는 connection string 웹 서비스를 가리 킵니다. 하위.

+0

실제로, 사이트에서도 마찬가지입니다.하지만 이것은 단위 테스트를위한 것입니다. 나는 그것을 같은 방식으로 할 수 있다고 생각하지만, 많은 일을 의미 할 것입니다. 그럼,이게 유일한 방법인가요? –

+0

범주별로 연결 문자열을 그룹화하므로 예를 들어 다음과 같이 말할 수 있습니다. GetConnectionString ("UnitTests", "ReportsDB"); 생산시 : GetConnectionString ("Production", "ReportsDB"); – Lloyd

2

는 당신이이 configSource 속성을 사용하지만 플랫폼/환경에 대한 일을해야 할 수has to be empty when using this feature요소로 인해 :

그러나, 당신이 configSource 속성을 사용하는 경우, 요소 설정을 병합하지 않으므로 전체 섹션을 별도의 파일로 이동해야합니다.

AppSettings 섹션은 file 요소로 이와 같은 값을 재정의 할 수있게 해줍니다.

VS2010에는 빌드 대상 (라이브/릴리스/디버그/테스트 등)을 기반으로 구성 파일을 수정할 수있는 기능이 있습니다.

+0

그래,하지만 그게 나에게도 같은 문제가있어. configSource 파일을 커밋하면 동일한 문제가 발생합니다. 그러나 커밋하지 않는 옵션입니다. –

+0

예,이 방법을 사용하면 configs를 체크인하지 않아도됩니다. 분명히 문제 일 수 있습니다. –

0

한 가지 방법은 웹 배포 프로젝트를 사용하여 빌드 할 때 web.config의 connectionStrings 섹션을 대체하는 것입니다. connstrs를 사용하는 디버그 모드와 변경되지 않은 해제 모드를 가질 수 있습니다. 모든 것이 완전히 svn에 체크인 할 수 있습니다. WDP를 사용하여 다른 사용자 정의 사후 구축 단계를 적용 할 수도 있습니다.이 단계는 매우 편리 할 수 ​​있습니다.

또 다른 옵션은 완전히 appSettings로 이동하는 것입니다.하지만이 파일은 이름/값 쌍만 보유하므로 코드가 변경됩니다.

4

웹 자신에게 배포 슬픔의 부하를 저장하는 DELPOYMENT 프로젝트 사랑 나누기

어떤 방법. 놀랍도록 멋진 아름다운 일은 각 고객을위한 빌드 구성입니다.

다음 연결 문자열을 포함하는 각 고객에 대한 구성 파일을 가질 수도 있습니다. 선택한 빌드 구성에 따라 다른 연결 문자열이 web.config에 붙여 넣어집니다. 이제는 각 고객별로 '다른'사이트를 구축하여 쉽게 사용할 수 있습니다.

가 이제 구성을 만드는 등 cust1ConnectionString.cfg, cust2 같은 설정 파일이라는 폴더를 ... 상상 해보세요. 릴리스 및 디버그에 이미 익숙하고 cust1, cust2를 작성하십시오.

그런 다음 웹 배포 프로젝트에는 웹 구성의 일부를 다른 파일의 섹션으로 바꿀 수있는 옵션이 있습니다.

그래서 cust1 배치로 이동하여 연결 문자열이 cust1connectionstrings.cfg 파일에 있음을 알립니다. cust2가 어디에 있는지 말해주십시오 ....

이제는 고객을위한 사이트를 구축 할 때마다 거기에 모든 설정이 web.config에 삽입되고 올바르게 구성된 사이트를 넘길 수 있습니다. 각 고객이 자신의 구성을 가지고 있기 때문에 SVN에 무엇이 있는지는 중요하지 않습니다. Sweet

0

도움이

using(var conn = new SqlConnection(ConnectionStringBuilder.Build()) 
    { 
     // do some stuff... 
    } 

희망 같은 것입니다. 이렇게하면 서버 자체에 저장/관리되는 모든 것을 변경하는 것에 대해 걱정할 필요가 없습니다. 이제 모든 연결 문자열이 원래 설정과 동일하게 유지되도록 새로운 빌드를 걱정없이 푸시 할 수 있습니다.

관련 문제