2011-10-25 3 views
0

구성 값에 따라 일부 기능을 테스트하려고합니다 (Settings["foo"] = true이면 5, 그렇지 않으면 -1을 반환).tets 프로젝트의 app.config 파일에서 구성 값을 변경하십시오.

그래서 내가하려는 것은 런타임에 구성 값을 변경하는 것입니다.
내 설정 파일 때문에 (간체)과 같습니다

<configSections> 
     <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">  
     <section name="DomainSettings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false"/> 
     </sectionGroup> 
    </configSections> 

<applicationSettings> 
<DomainSettings> 
    <setting name="foo" serializeAs="String"> 
     <value>false</value> 
    </setting> 
</ICTS.SmartQueue.Domain.DomainSettings> 
</applicationSettings> 

와 내가 뭘 다음 나는 시험의 구성을 볼 때

//get config file 
System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
//get relevant section 
var section = (ClientSettingsSection)config.GetSection("applicationSettings/DomainSettings"); 
//get element from section 
var element = section.Settings.Get("Foo"); 
//change its value and save it 
element.Value.ValueXml.InnerText = true.ToString(); 
config.Save(System.Configuration.ConfigurationSaveMode.Modified, true); 
//force refresh 
ConfigurationManager.RefreshSection("applicationSettings/DomainSettings"); 

나는 값이 실제로 변경되는 것을 볼 수 있습니다 파일을 'Out'디렉토리 (MyTests.DLL.config)에 저장하십시오.
그러나 DomainSettings.Default.Foo은 여전히 ​​'거짓'으로 평가됩니다.

어떤 아이디어가 있습니까?

답변

0

구성 파일이 캐시됩니다. 즉, 새로운 값으로 구성 파일을 수정하기 만하면 응용 프로그램이 다시로드 될 때까지 다시로드되지 않습니다. 그런 다음 새 값이 변경된 것을 볼 수 있습니다. 하지만 코드에서 config 파일을 참조하면 파일을 읽지 않고 캐시 된 config 파일을 읽습니다. 귀하의 경우에는 이 아니며은 새 값으로 업데이트됩니다.

+0

나는'ConfigurationManager.RefreshSection'이 그것을 처리해야한다고 생각했다. (MSDN에서 : "이 방법은 다른 섹션에 영향을주지 않고 지정된 구성 섹션의 캐시를 무효화합니다.") –

0

런타임에 구성 파일을 변경할 수 있지만 앱을 다시 시작할 때까지 변경 사항이 선택되지 않기 때문입니다. ASP.NET이 다르면 Web.config 파일이 변경된 직후 변경 사항을 적용합니다.

+0

그래서 웹 구성의 값을 런타임에 변경하면 immediatly 변경 사항이 표시됩니까? 자동으로 애플 리케이션을 다시 시작? –

+0

예, 앱이 자동으로 다시 시작될 예정입니다. – Icarus

관련 문제