在测试项目's app.config文件中修改配置值

本文关键字:文件 config 修改 配置 app 项目 测试 | 更新日期: 2023-09-27 18:12:26

我试图测试一些依赖于配置值的功能(如果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"。

任何想法?

在测试项目's app.config文件中修改配置值

配置文件被缓存。换句话说,仅仅因为您用一个新值修改了配置文件,它就不会重新加载,直到应用程序重新加载。然后,您将看到新值的更改。但是,当您在代码中引用配置文件时,它不会读取文件,而是读取缓存的配置。在你的例子中,这是而不是更新了你的新值

这是因为你可以在运行时更改配置文件,但这些更改直到重新启动应用程序才会被拾取。NET是不同的,它会在Web之后立即拾取更改。