2010-05-02 2 views
0

web.config에서 사용자 지정 구성 섹션을 정의하는 ASP.NET 응용 프로그램이 있습니다.ASP.NET 구성 상속

최근에 나는 기존의 프로덕션 응용 프로그램과 함께 테스트 용으로 두 개의 응용 프로그램 인스턴스를 배포하려는 고객이있었습니다.

고객에 의해 선택된 구성이었다

  • foo.com

    - 생산 애플리케이션
  • foo.com/Testing - 시험이 경우 애플리케이션

상기 구성 ASP.NET 엔진은 foo.com/web.config에서 foo.com/Testing/web.config로 설정을 적용하기로 결정했습니다.

감사하게도 두 웹 응용 프로그램이 격리되었다는 잘못된 인상을주기보다는 두 번째 수준에서 섹션이 재정의되었으므로 구성 오류가 발생했습니다.

내가하고 싶은 것은 제 구성 섹션이 상속되지 않았기 때문에 필요한 모든 웹 응용 프로그램에 대해 다시 정의해야하지만이 작업을 수행 할 방법을 찾지 못했습니다.

내 Web.config의가/테스트에서 Web.config의에서이

<configuration> 
    <configSections> 
    <section name="MyApp" type="MyApp.ConfigurationSection"/> 
    </configSections> 
    <MyApp setting="value" /> 
    <NestedSettingCollection> 
     <Item key="SomeKey" value="SomeValue" /> 
     <Item key="SomeOtherKey" value="SomeOtherValue" /> 
    </NestedSettingCollection> 
    </MyApp> 
</configuration> 
+0

당신이 더 "다행히이 구성 오류가 발생 explan 수 두 웹 애플리케이션이 분리되었다는 잘못된 인상을주는 것 "이라고 덧붙였다. –

+0

중첩 된 구성 설정은 부모 구성에 추가 된 값과 동일한 키를 사용하여 NestedSettingCollection에 값을 추가하는 것이 었습니다. 이로 인해 부모로부터 설정을 가져 오는 것이 아니라 "동일한 키를 가진 항목이 이미 있습니다"라는 예외가 발생했습니다. 프로덕션 데이터베이스를 가리키는 기본 응용 프로그램에 연결 문자열이 있고 테스트 데이터베이스를 가리 키도록 하위 디렉터리에 연결 문자열 속성을 정의한 경우 사용자가 가리키고 있던 데이터 묶음을 삭제 한 직후에 어떤 결과가 발생할지 상상해보십시오 제작시 : ( – NowYouHaveTwoProblems

+0

foo.com은 웹 사이트의 루트로서 테스트 설정이 해당 웹 사이트의 응용 프로그램이라고 상상해보십시오 .ASP.NET은 웹 사이트의 구성을 상속받습니다 (현재 발생하고있는 내용) –

답변

0

같은 것을 끝, 이렇게 :

<configuration> 
    <configSections> 
    <remove name="MyApp"/> <=========== 
    <section name="MyApp" type="MyApp.ConfigurationSection"/> 
    </configSections> 
    <MyApp setting="value" /> 
    <NestedSettingCollection> 
     <Item key="SomeKey" value="SomeValue" /> 
     <Item key="SomeOtherKey" value="SomeOtherValue" /> 
    </NestedSettingCollection> 
    </MyApp> 
</configuration> 
+0

아무것도 변경하지 않는 것 같습니다. 여전히 동일한 오류 메시지가 나타납니다. – NowYouHaveTwoProblems

1

당신이 위치 요소를 사용하려고 했습니까? 그것이 작동하는지 확실하지 않지만, 시험해볼만한 가치가 있습니다. 이것을 테스트 프로젝트의 web.config에 넣고 사용해보십시오. 섹션이 아니라 두 번째 수준에서 재정의 때문에 위치 요소를 사용하는 방법에 대한 이야기 ​​

<location path="." inheritInChildApplications="false"> 
    <MyApp setting="value" /> 
    ... 
    </MyApp>  
    </location> 

두 링크는 ​​

http://www.aspdotnetfaq.com/Faq/how-to-disable-web-config-inheritance-for-child-applications-in-subfolders-in-asp-net.aspx

http://msdn.microsoft.com/en-us/library/b6x6shw7.aspx

+0

이것은 흥미로운 방법입니다. 내 구성 설정을 상속하지 않도록 정의하는 방법을 찾고 싶지만 기본 웹을 변경할 수는 있습니다. .config를 사용하여 위치 섹션 내의 관련 섹션을 정의하십시오. – NowYouHaveTwoProblems

+0

+1 - 필자가 작성한 정확한 문제를 해결하기 위해 location 요소를 사용했습니다. 엿보기. 그래도 조심해. 위치 태그에서 상속 받기를 원치 않는 항목 만 감싸십시오. 나는 대부분의 웹을 감쌌다.config를 사용하여 디버거가 초기에 프로세스에 연결되지 않는 문제가 발생했습니다. –