2010-07-12 1 views
2

안녕하세요, 저는 webconfig에서 appconfigtings를 사용하여 개별 설정 파일을 가리키는 것을 시도했지만, 유일한 문제는 설정 파일이 유지된다는 것입니다. seprate 프로젝트에서 별도의 프로젝트에서 app config를 참조 할 수 있습니까?web config <appSettings file = "별도의 프로젝트에있는 설정 파일"></ appSettings>

+0

'file' 속성의 목적은 응용 프로그램 구성에 더 많은 유연성을 제공합니다. 또한 경로는 ** 상대 **입니다. 다른 배포 구성 등을 허용하는 것입니다. 왜 다른 프로젝트의 특정 파일을 대상으로합니까? 별도의 파일을 링크하는 대신 복사하는 것이 훨씬 더 합리적입니다 (배포가 엉망이 될 수 있습니다). –

+0

안녕하세요 Jaroslav 우리는 다른 환경, 예를 들어 local, dev, staging, config라는 별도의 클래스 프로젝트에있는 configs를 가지고 있으므로 현재 환경의 relavant 파일의 위치를 ​​가리 키기 만하면됩니다. 이건 내 제안이 아니야. 그리고 내가 제일 좋은 방법이 아닐지도 모른다. – Matthew

답변

1

설정을 위해 프로젝트 외부를 보지 않는 것이 가장 좋습니다. 설정 파일은 런타임 파일이기 때문에 종종 애플리케이션 루트의 동일한 디렉토리 또는 하위 디렉토리에 있어야합니다. 루트 경로 밖에있는 폴더를 가리키면 누군가가 앱의 실제 위치를 이동하고 가상 디렉토리를 사용하기로 결정할 때 문제가 발생할 수 있습니다.

여러 프로젝트에 공통적 인 구성 파일을 갖고 싶다면 ConfigGen이 좋은 해결책이라는 것을 알았습니다. 그것은 다른 기계에 대해 다른 (또는 귀하의 경우 동일한) 설정 파일을 생성하는 구성 생성기입니다. 다음과 같은 일반적인 명령 줄을 사용합니다. 여기서 -s는 다양한 출력 파일에 삽입 할 환경 별 차이점을 포함하는 설정 XML 파일입니다. -t는 설정 파일의 설정에 대한 토큰 플레이스 홀더를 포함 할 수있는 템플릿 파일입니다. 귀하의 경우에는

cfg.exe -s AppSettings.Config.Settings.xls -t AppSettings.Config.Template.xml -o Configs -ves "EmptyString" 

, 당신은 로컬 appSettings는 파일을 가져 와서 생성하는 빌드 전 단계를 공유 위치에서 설정 및 템플릿 파일을 가지고 추가합니다 : 그리고 -o 출력 폴더입니다. 약간 다른 명령 행이 필요합니다. 나는 당신이 당신의 csproj 파일에 넣을 것이라는 BeforeBuild 단계에서 포장했다 :

이 경우
<Target Name="BeforeBuild"> 
    <Exec Command="cfg -s X:\sharedConfig\AppSettings.Config.Settings.xls 
    -t X:\sharedConfig\AppSettings.config.template.xml 
    -l -n $(ProjectDir)AppSettings.config" /> 
</Target> 

, X : \ sharedconfg \ 템플릿 및 설정의 매핑 위치하며, 2 개 개의 새로운 인수가, -l 및 -n. -l은 로컬 파일 만 수행하므로 설정 파일에서 빌드를 실행중인 시스템과 일치하는 행을 찾습니다. 그러한 행이 없다면 "default"라는 행을 찾아야합니다.

-n 인수를 사용하면 출력 파일을 넣을 정확한 위치를 지정할 수 있습니다.

빌드 단계 전에 두 프로젝트에 넣으면 각각이 동일한 구성 사본을 생성합니다.

관련 문제