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

C# 从单独的工具编辑App.Config名称-值对,c#,wpf,winforms,app-config,C#,Wpf,Winforms,App Config,我正在尝试为服务人员创建一个简单的工具来更新不同程序的App.Config中的一些条目。Config文件包含程序初始化时使用的自定义参数 由于App.Config包含许多敏感项,因此需要一个工具来确保只更改某些参数。因此,不允许他们直接编辑App.Config的原因是 我的问题是: 如何从单独的程序访问App.config配置部分的名称-值对 Winforms和WPF哪个更适合UI?他们的控件是否可以方便地在将来添加更多条目 该工具应允许用户设置字符串、int、double或Boolean 以下

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

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

我的问题是:

  • 如何从单独的程序访问App.config配置部分的名称-值对
  • Winforms和WPF哪个更适合UI?他们的控件是否可以方便地在将来添加更多条目
  • 该工具应允许用户设置字符串、int、double或Boolean
  • 以下是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后,是否有类似的方法从单独的程序执行此操作?

    问题1的答案:App.Config文件是XML文件。与使用
    System.Configuration
    类相比,将其作为XML文档加载并以编程方式修改,然后进行保存可能是最简单的方法


    ETA:我相信这可以通过
    ConfigurationManager
    完成。看看这个方法。这里有一个很好的例子。

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

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

    至于Windows.Forms和WPF,这是一个设计决策。两者都有优点和缺点

    [更新]


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

    请注意:问题3实际上不是问题。关于设置这些类型的数据,您想问些什么吗?啊,是的,很好!如果可能的话,UI控件应该提供数据类型。如果有错误控制,比如设置double,其中应该有一个整数,这将导致错误。您是否考虑过加密敏感部分?然后,您可以让服务人员更改未加密的部分。这有更多的信息。谢谢@DeanOC的链接。下次我会记下这个。不幸的是,目前我们无法更改App.Config程序。我已经更新了Q,以说明如何更新程序本身中的值。有没有类似的方法可以从外部程序执行此操作?正如@Ann和我所建议的,不要使用
    System.Configuration
    。只需将其视为XML文件。谢谢Richard。你能举一个简单的例子说明如何使用XPath或LINQ吗?谢谢你的帮助Richard,但我认为Ann发布链接的时间要早一点。再次感谢!试试谷歌搜索“c#xpath”或“c#linq到xml”谢谢安。我已经更新了Q,以显示如何使用
    ConfigurationManager
    更新值。加载XML后有没有办法做到这一点?如果您的意思是“使用XML技术”,那么可以使用LINQforXML。如果你指的是“配置管理器”,我不确定。可以使用它用另一个配置文件覆盖配置文件,但我不知道您是否可以动态编辑和保存配置文件。让我查一些东西。如果你找不到任何东西,你能举一个简单的例子说明LINQ在这种情况下是如何工作的吗。我不熟悉林克。谢谢。@RyanR我已经更新了答案,添加了一个示例链接。太好了!这个链接非常有用。
    NameValueCollection nvc = (NameValueCollection)ConfigurationManager.GetSection("Settings/Section1");