编程语言
首页 > 编程语言> > c#-在运行时修改app.config部分

c#-在运行时修改app.config部分

作者:互联网

我需要修改< configuration>< system.diagnostics>运行时的app.config部分,以便我可以:

>在< sharedListeners>下添加CustomTraceListener.元素,它需要特殊的initializeData,只能在运行时确定.
>将CustomTraceListener共享的侦听器添加到< source>< listeners>下的现有源.元件.
>将CustomTraceListener持久保存到其他程序集,这些程序集将从配置文件中加载其跟踪源和侦听器配置.

app.config中的相关部分目前看起来像这样:

<system.diagnostics>
  <sources>
    <source name="mysource" switchName="..." switchType="...">
      <listeners>
        <add name="console" />
        <add name="customtracelistener" /> /// need to add new listener here
      </listeners>
    </source>
  </sources>
  <sharedListeners>  
    <add name="console" type="..." initializeData="..." />
    <add name="customtracelistener" type="..." initializeData="..."> /// need to add custom trace listener here 
      <filter type="..." initializeData="Warning"/> /// with a filter
    </add>
  </sharedListeners>
  <switches>
    <add name="..." value="..." />
  </switches>
</system.diagnostics>

使用ConfigurationManager,我可以轻松做到:

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
ConfigurationSection diagnostics = config.GetSection("system.diagnostics");

当我这样做时,诊断是System.Diagnostics.SystemDiagnosticsSection类型.有趣的是,我无法将诊断转换为SystemDiagnosticsSection类型,因为我无法在任何名称空间中找到它.无论如何,ConfigurationSection似乎没有任何可用于将数据写入该部分的方法.

我也不能将其强制转换为NameValueConfigurationCollection,因为诊断的基本类型为ConfigurationSection.我听说过这种技术,但似乎无法使用.

我是否必须恢复使用普通的XML来完成此任务?我真的不喜欢重新发明轮子.

解决方法:

您可以通过ConfigurationManager找到app.exe.config文件的路径,然后将配置文件作为XDocument加载.

string configPath = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None).FilePath;

XDocument config = XDocument.Load(configPath);
XElement diagnostics = config.Descendants().FirstOrDefault(e => e.Name == "system.diagnostics");

if (diagnostics == default(XElement))
{
    /// <system.diagnostics> element was not found in config
}
else
{
    /// make changes within <system.diagnostics> here...
}

config.Save(configPath);

Trace.Refresh();  /// reload the trace configuration

进行所需的更改后,将XDocument保存回磁盘,并调用Trace.Refresh()重新加载跟踪配置.

See MSDN regarding the Trace.Refresh method here.

标签:configurationmanager,configuration,app-config,c,net
来源: https://codeday.me/bug/20191027/1943426.html