2009-05-04 6 views
7

웹 및 Windows NT 서비스 응용 프로그램을 모두 포함하는 솔루션이 있습니다. 물론 이것은 두 가지 다른 프로젝트이지만 동일한 솔루션 내에 있습니다. 그러나 그들은 동일한 구성을 많이 공유합니다..NET의 공유 구성 파일

현재 web.config 및 app.config 파일에 동일한 값이 있습니다. 이것은 지저분 해지기 시작했고 솔루션 내의 두 응용 프로그램 모두에 대해 공유 구성 파일을 갖고 싶습니다. 구성 웹 응용 프로그램의 루트 레벨에없는 경우

  • 웹 응용 프로그램에 문제가 있습니까? 여기에 한계가 있습니까? 내가 Web.config의
  • 를 사용하지 않는 경우
  • 나는 설명은 일반적으로 공유 구성에 대한 나쁜 생각 캐싱 및 웹 응용 프로그램의 자동 재활용을 풀 것인가?

답변

9

글쎄, 구성의 특정 부분을 별도의 .config 파일로 "외부화"하여 두 위치에서 모두 사용할 수 있습니다.

예.

<connectionStrings configSource="connectionStrings.config" /> 

을 다음과 같이 "connectionString.config"파일이 있습니다 : 당신과 같이 연결 문자열 설정을 구체화 할 수

<?xml version="1.0" encoding="utf-8"?> 
<connectionStrings> 
    <add name="ConfigurationDatabase" 
     connectionString="server=.;Integrated Security=true;database=test"/> 
    <add name="TestDatabase" 
     connectionString="server=TEST;Integrated Security=true;database=test"/> 
</connectionStrings> 

기본적으로, 어떤없는 ConfigurationSection 이러한 "configSource"설정을 가지고있는 사용할 외부 파일을 지정할 수 있습니다.

그런 식으로 두 구성 파일의 공통 부분을 공유 할 수 있습니다. 서비스의의 app.config에되지 않습니다 웹 특정 구성 요소가 있기 때문에

마크는

+0

configSource 특성을 사용하면 ".."또는 "~ /"을 넣을 수 없으며 "구성 파일과 동일한 디렉터리 나 하위 디렉터리에있는 파일을 참조해야합니다." 이 두 가지 프로젝트가 둘 다 자신보다 높은 디렉토리 레벨에 도달 할 수없는 경우 어떻게 외부 파일을 공유 할 수 있습니까? –

+0

Indy의 @James : 하드 링크 및 소프트 링크와 같은 NTFS 파일 시스템 수준의 기능을 사용하여 디렉토리에 파일을 표시 할 수 있습니다. 실제로는 없지만 ... (링크/실제 파일 포인터). "NTFS 하드 링크"또는 "NTFS 접속점"에 대한 Google –

2

당신은 여전히 ​​의 .config가 필요합니다. Marc says으로 ConfigSource 특성을 사용하면 공통 요소를 공유 할 수 있습니다.

요소는 파일 특성에 약간의 차이가 있음을 유의하십시오.

사용자 지정 응용 프로그램 구성 설정을 포함하는 외부 파일의 상대 경로를 지정합니다. 지정된 파일에는 appSettings에 지정된 것과 동일한 종류의 설정이 포함되어 있습니다. 속성을 추가, 제거 및 제거하고 해당 요소와 동일한 키/값 쌍 형식을 사용합니다.

이것은 당신이 외부 파일로 전체 섹션을 교체 할 필요가 없기 때문에, 그냥 당신이 추가로 가지고, 또는 값을 대체 할 요소를 포함 할 수 있으며, ConfigSource 속성과 다르게 동작 :

당신은 추가 설정 또는 재정의 appSettings는 요소에 지정된 설정을 제공하는 구성 파일을 지정하기 위해 파일 속성을 사용할 수 있습니다.

다른 요소를 공유 할 수 ConfigSource를 사용하는 경우, 당신 아직도 값이 변경되는 응용 프로그램의 자동 다시 시작해야합니다 - ASP.NET 응용 프로그램에 대한 무시해야 속성 restartOnExternalChanges에 대한 메모 그러나 파일을 사용하여 속성은 변경으로 인해 다시 시작되지 않음을 의미합니다.

외부 파일의 내용은 여전히 ​​캐시되어야하므로 성능에 영향을 미치지 않아야합니다.