【问题标题】:change a config value in tets project's app.config file更改测试项目 app.config 文件中的配置值
【发布时间】:2011-12-14 23:30:43
【问题描述】:

我正在尝试测试一些依赖于配置值的功能(如果 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 的评估结果仍为“假”。

有什么想法吗?

【问题讨论】:

    标签: c# configuration app-config configuration-files


    【解决方案1】:

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

    【讨论】:

    • 我认为ConfigurationManager.RefreshSection 应该处理这个问题。 (来自 MSDN:“此方法使指定配置部分的缓存无效,而不影响其他部分。”)
    【解决方案2】:

    这是因为您可以在运行时更改配置文件,但在您重新启动应用程序之前不会获取更改。 ASP.NET 不同,它会在 Web.config 文件更改后立即获取更改。

    【讨论】:

    • 所以如果我更改 web 配置中的值 - 在运行时 - 它会立即看到更改吗?自动重启应用?
    • 是的,因为应用会自动重启。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-21
    • 2010-11-24
    • 2012-09-02
    • 2014-04-19
    • 1970-01-01
    相关资源
    最近更新 更多