从单独的工具编辑App.Config名称 - 值对

时间:2012-12-12 23:26:35

标签: c# wpf winforms app-config

我正在尝试为服务人员创建一个简单的工具来更新其他程序的App.Config中的一些条目。 App.Config文件包含初始化程序时使用的自定义参数。

由于App.Config包含许多敏感项,因此需要一个工具来确保只更改某些参数。因此,不允许他们直接编辑App.Config的原因。

我的问题:

  1. 如何从单独的程序中访问App.config的配置部分中的名称 - 值对?
  2. 哪个更适合用户界面:Winforms或WPF?他们的控件是否可以在将来轻松添加更多条目?
  3. 该工具应允许用户设置String,int,double或Boolean。
  4. 以下是App.Config的结构:

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
    
      <configSections>
        <sectionGroup name="Settings">
          <section name="Section1" type="System.Configuration.NameValueSectionHandler"/>
          <section name="Section2" type="System.Configuration.NameValueSectionHandler"/>
          <section name="Section3" type="System.Configuration.NameValueSectionHandler"/>
          <section name="Section4" type="System.Configuration.NameValueSectionHandler"/>
        </sectionGroup>
      </configSections>
    
      <Settings>
        <Section1>
          <add key="NAME_STRING" value="Some String"/>
        </Section1>
    
        <Section2>
          <add key="NAME_INTEGER" value="10"/>
        </Section2>
    
        <Section3>
          <add key="NAME_DOUBLE" value="10.5"/>
        </Section3>
    
        <Section4>
          <add key="NAME_BOOLEAN" value="true"/>
        </Section4>
      </Settings>
    
      ... Omitted ...
    
    </configuration>
    

    在使用App.Config本身的程序中,我可以轻松更改值:

    NameValueCollection nvc = (NameValueCollection)ConfigurationManager.GetSection("Settings/Section1");
    

    在加载App.Config后,是否有类似的方法从单独的程序执行此操作?

2 个答案:

答案 0 :(得分:2)

对问题1的回答:app.config文件是一个XML文件。最简单的方法是将其作为XML文档加载并以编程方式进行修改,然后进行保存,而不是使用System.Configuration类。

ETA:我相信可以使用ConfigurationManager完成。查看OpenMappedExeConfiguration方法。那里有一个很好的例子。

答案 1 :(得分:0)

您可以将app.config文件视为普通的XML文件。使用XDocument或XmlDocument加载文件。

然后使用XPath或Linq to XML查找名称 - 值对。

至于Windows.Forms与WPF,它是一个设计决定。两者都有好处和坏点。

<强> [更新]

如果您仍想使用System.Configuration,则可以使用ConfigurationManager.OpenExeConfiguration访问其他程序的app.config文件。这将返回Configuration对象,该对象具有GetSection方法。