2008-09-30 6 views
8

저는 여러 응용 프로그램으로 구성된 상대적으로 큰 .Net 시스템을 보유하고 있습니다. 다른 app.config 파일을 많이 사용하는 대신 모든 응용 프로그램간에 단일 구성 파일을 공유하고 싶습니다..net 응용 프로그램에서 응용 프로그램 구성을 공유하려면 어떻게해야합니까?

내 시스템에서 개발할 때 하나의 버전, 시스템에서 다른 누군가를 개발하기위한 하나의 버전, 테스트 시스템 용 버전 및 라이브 시스템 용 버전 중 하나를 갖고 싶습니다.

쉬운 방법이 있나요?

+0

나는 동일한 질문을했지만 결코 해결책을 찾지 못했습니다. 나는이 실을 추적 할 것이다. –

답변

6

여러 응용 프로그램에서 필요로하는 대량의 구성의 경우이 구성을 중앙 저장소에 저장합니다. 데이터베이스, 공통 위치에있는 파일

생산 production.app.config 테스트 시험 :

은 서로 다른 환경의 각 빌드 구성과 환경의 이름을 따서 명명 설정 파일, 예를 작성, 서로 다른 환경에 대한 구성 파일의 다른 버전을 사용하려면 .app.config

그런 다음 미리 빌드 이벤트를 사용하여 프로젝트의 기본 app.config에 올바른 구성을 복사 할 수 있습니다. 그러면 정상적으로 출력 디렉토리에 복사됩니다.

사전 빌드 이벤트는 위와 비슷하지만 $ (Configuration)을 사용하여 원하는 환경에 적합한 파일을 가져옵니다.

위와 결합하여 전체 빌드 별 설정 파일을 각 프로젝트에 복사 할 수 있습니다.

+2

중앙 저장소에는 일부 로컬 설정 정보 (예 : ConnectionString 또는 액세스에 필요한 항목)가 필요합니다. 또한 일부 정보는 로컬과 저장소간에 분할되어야합니다 (예 : '초기'오류를보고 할 수있는 로깅). 물론 아직도 할 수 있지만 약간의 추가 생각이 필요합니다. –

+0

빌드 구성을 Visual Studio에서 수행해야한다고 가정합니다.이 작업은 정상적으로 수행되었지만 실수로 빌드 구성을 변경하기 쉽기 때문에 많은 관리가 필요합니다. 좋은 대답! –

+0

Nick R - 비주얼 스튜디오에서만 해봤지만 MSBuild가 왜 그렇게 할 수 없었는지 알지 못합니다. – marcj

2

당신은 빌드 후 이벤트를 사용할 수 있습니다 - 같은, 다른 사람에게 마스터 프로젝트에서 설정 파일을 복사하기 위해 "아이"프로젝트 (등록 정보> 빌드 이벤트) : (

copy /Y c:\path\to\master\project\app.config $(TargetPath).config 
exit 0 

은 " 마지막 행으로 "exit 0"은 빌드 오류를 방지합니다).

다른 빌드 대상 ("RELEASE", "DEBUG"등)에 대해 별도의 구성 파일을 사용하려면 NOTEPAD.EXE에서 .csproj 파일 (또는 .vbproj)을 편집하여 각 빌드 대상에 AppConfig 태그를 추가하십시오 이 같은 목표 그룹 :

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> 
    <DebugSymbols>true</DebugSymbols> 
    <DebugType>full</DebugType> 
    <Optimize>false</Optimize> 
    <OutputPath>.\bin\Debug\</OutputPath> 
    <DefineConstants>DEBUG;TRACE</DefineConstants> 
    <AppConfig>debug.app.config</AppConfig> 
    </PropertyGroup> 
    <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> 
    <DebugSymbols>true</DebugSymbols> 
    <DebugType>full</DebugType> 
    <Optimize>false</Optimize> 
    <OutputPath>.\bin\Devel\</OutputPath> 
    <DefineConstants>TRACE</DefineConstants> 
    <AppConfig>release.app.config</AppConfig> 
    </PropertyGroup> 

공지 사항 각 그룹에 존재하는 새로운 < appconfig가> 태그입니다.

2

대신 설정 파일의 당신의 <appSettings> 섹션 <add> 요소를 추가, 당신은 다른 파일에서 해당 데이터를로드하도록 지시하는 <appSettings> 요소에 file= 속성을 추가 할 수 있습니다. 그러면 공통 파일에서 공통 설정을 유지할 수 있습니다.

MSDN Library의 appSettings Element (General Settings Schema)을 참조하십시오.

+0

나는 그렇게합니다. 나는 Settings.settings 파일 (이 설정을 강력하게 입력하고 구성을 쉽게 업그레이드 할 수 있도록 선호 함)에이 기능을 제공하지 않는다는 점에 실망했습니다. –

0

구성 설정을 machine.config에 입력하여 여러 응용 프로그램간에 공유 할 수도 있습니다. 이것은 배치가 더 문제가 될 수 있습니다.

1

NTFS symbolic links을 사용하여 .NET .config 파일을 공유 할 수 있습니다. ASP.NET 응용 프로그램, 콘솔 응용 프로그램 등으로 구성된 솔루션에서이 기능이 성공적으로 사용 된 것을 보았습니다.

+0

나는 이것을 좋아하지만 또 다른 전개 단계를 추가한다. – ProfK