我正在尝试测试某些依赖于配置值的功能(如果Settings["foo"]
= true而不是返回5,否则返回-1)。
所以我要做的是在运行时更改配置值 我的配置文件看起来像这样(简化):
<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”。
任何想法?
答案 0 :(得分:0)
缓存配置文件。换句话说,仅仅因为您使用新值修改配置文件,它将不会重新加载,直到应用程序重新加载。然后,您将看到新值已更改。但是当您在代码中引用配置文件时,它不会读取文件,而是读取缓存的配置。在您的情况下,不使用您的新值更新。
答案 1 :(得分:0)
这是因为您可以在运行时更改配置文件,但在重新启动应用程序之前不会获取更改。 ASP.NET不同,它会在Web.config文件更改后立即获取更改。