我試圖測試一些依賴於配置值的功能(如果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
仍然評估爲'false'。
有什麼想法?
我認爲'ConfigurationManager.RefreshSection'應該照顧那個。 (從MSDN:「此方法使指定配置節的緩存不會影響其他節」) –