문제

.NET 프로젝트에서 app.config 파일에 연결 문자열과 같은 구성 설정이 저장되어 있다고 가정해 보겠습니다. 이는 팀의 개발자마다 다릅니다(로컬 SQL Server 또는 특정 서버 인스턴스를 사용할 수 있음). , 또는 원격 서버 사용 등).

각 개발자가 자신만의 개발 "선호도"를 가질 수 있도록 솔루션을 어떻게 구성할 수 있습니까?소스 제어에 체크인되지 않음), 소스 제어에 체크인된 기본 연결 문자열을 제공합니다(따라서 빌드 프로세스 또는 새 개발자에게 올바른 기본값 제공).


편집하다:"할 수 있나요?file" @Jonathon이 제안한 방법은 어떻게 든 connectionStrings 부분?

도움이 되었습니까?

해결책

AppSettings는 로컬 파일로 재정의될 수 있습니다.

<appSettings file="localoveride.config"/>

이를 통해 각 개발자는 자신의 로컬 설정을 유지할 수 있습니다.

연결 문자열에 관한 한 완벽한 세상에서는 모든 개발자가 각각 SQL Server를 실행하는 것이 아니라 테스트 DB에 연결해야 합니다.

그러나 소스 제어에 Web.Config.Prd라는 파일을 유지하고 이를 빌드 배포에 사용하는 것이 가장 좋습니다.누군가 web.config를 수정하는 경우 .PRD 파일에도 변경 사항을 추가해야 합니다. 거기에는 좋은 자동화가 없습니다.

다른 팁

편집하다:@jonathon이 제안한 "파일"메소드가 ConnectionStrings 섹션에서 어떻게 든 사용될 수 있습니까?

또는 체크인된 구성 파일에 여러 연결 문자열이 있을 수 있으며 AppSettings 키를 사용하여 사용할 ConnectionString을 결정할 수 있습니다.이 목적을 위해 코드베이스에 다음이 있습니다.

public class ConnectionString
{
    public static string Default
    {
        get 
        { 
            if (string.IsNullOrEmpty(ConfigurationManager.AppSettings["DefaultConnectionStringName"]))
                throw new ApplicationException("DefaultConnectionStringName must be set in the appSettings");

            return GetByName(ConfigurationManager.AppSettings["DefaultConnectionStringName"]);
        }
    }

    public static string GetByName(string dsn)
    {
        return ConfigurationManager.ConnectionStrings[dsn].ConnectionString;
    }
}

저는 항상 구성 파일에 대한 템플릿을 만듭니다.

예를 들어 저는 프로젝트 구축에 NAnt를 사용합니다.local.properties.xml.template이라는 파일을 체크인했습니다.내 NAnt 빌드는 local.properties.xml이 존재하지 않으면 개발자에게 경고합니다.해당 파일 내부에는 워크스테이션별 설정이 있습니다.템플릿은 소스 제어로 체크인되지만 실제 구성은 체크인되지 않습니다.

나는 딱 맞는 아주 구식 디자인을 사용합니다.

  • /_Test__app.config
  • /_Prod__app.config
  • /app.config

그런 다음 nant 스크립트에는 현재 빌드 환경과 _ app.config를 복사하여 app.config에 복사하는 작업이 있습니다.

불쾌하지만 공급자가 "dev" 또는 "prod" 연결 문자열을 보고 명명된 연결 문자열이 3개만 있다고 말하여 공급자와 ConfigurationManager 사이에 들어가서 이를 스푸핑할 수는 없습니다.

낸트 작업:

<target name="copyconfigs" depends="clean">
  <foreach item="File" property="filename" unless="${string::get-length(ConfigPrefix) == 0}">
   <in>
     <items>
       <include name="**/${ConfigPrefix}App.config" />
       <include name="**/${ConfigPrefix}connectionstrings.config" />
       <include name="**/${ConfigPrefix}web.config" />
     </items>
   </in>
   <do>
    <copy overwrite="true" file="${filename}" tofile="${string::replace(filename, ConfigPrefix,'')}" />
   </do>
  </foreach></target>

@Jonathon이 제안한 "file" 메서드를 어떻게든connectionStrings 섹션과 함께 사용할 수 있습니까?

아니요. 하지만 ConnectionString을 AppSettings 키로 저장하는 데 방해가 되는 것은 없습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top