您如何使用 c# 4.0 app.config 中的部分?

Posted

技术标签:

【中文标题】您如何使用 c# 4.0 app.config 中的部分?【英文标题】:How do you use sections in c# 4.0 app.config? 【发布时间】:2011-06-07 22:13:40 【问题描述】:

我想使用我的应用程序配置来存储 2 家公司的设置,如果可以使用一个部分将数据与另一个分开,而不是给他们不同的键名,我会更喜欢。

我一直在网上查看,但当人们使用部分或找到过时的简单使用方法时,我似乎有点不知所措。谁能给我一份关于它们的初学者指南?

下面是我的 app.config 的示例:

  <configSections>
    <section name="FBI" type="" />
    <section name="FSCS" type="" />
  </configSections>

  <FSCS>
    <add key="processingDirectory" value="C:\testfiles\ProccesFolder"/>
  </FSCS>
  <FBI>
    <add key="processingDirectory" value="C:\testfiles\ProccesFolder"/>
  </FBI>

更新:

基于答案的高级解决方案。以防有人想知道。

App.config:

<configuration>
    <configSections>
        <sectionGroup name="FileCheckerConfigGroup">
          <section name="FBI" type="System.Configuration.NameValueSectionHandler" />
          <section name="FSCS" type="System.Configuration.NameValueSectionHandler" />
        </sectionGroup>
    </configSections>
    <FileCheckerConfigGroup>
        <FSCS>
            <add key="processingDirectory" value="C:\testfiles\ProccesFolder"/>
        </FSCS>
        <FBI>
            <add key="processingDirectory" value="C:\testfiles\ProccesFolder"/>
        </FBI>
    </FileCheckerConfigGroup>
</configuration>

代码:

// Get the application configuration file. 
System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);

// Get the collection of the section groups. 
ConfigurationSectionGroupCollection sectionGroups = config.SectionGroups;

foreach (ConfigurationSectionGroup sectionGroup in sectionGroups)

    if (sectionGroup.Name == "FileCheckerConfigGroup")
    
        foreach (ConfigurationSection configurationSection in sectionGroup.Sections)
        
          var section = ConfigurationManager.GetSection(configurationSection.SectionInformation.SectionName) as NameValueCollection;
          inputDirectory = section["inputDirectory"]; //"C:\\testfiles";
        
    

【问题讨论】:

您如何知道要使用哪家公司的数据?那你怎么知道你是 FBI 的用户? 设置好输入目录后,会有一个方法为那个公司做事。 【参考方案1】:
<configSections>
  <section name="FBI" type="System.Configuration.NameValueSectionHandler" />
  <section name="FSCS" type="System.Configuration.NameValueSectionHandler" />
</configSections>

<FSCS>
  <add key="processingDirectory" value="C:\testfiles\ProccesFolder"/>
</FSCS>
<FBI>
  <add key="processingDirectory" value="C:\testfiles\ProccesFolder"/>
</FBI>

然后:

var section = ConfigurationManager.GetSection("FSCS") as NameValueCollection;
var value = section["processingDirectory"];

【讨论】:

这很棒。你会碰巧知道一种从代码中检索应用配置中所有不同部分的方法吗? 注意:如果您使用的是 sectionGroups,则该组将作为路径添加到 get 部分,即 ConfigurationManager.GetSection("GroupName/FSCS") as NameValueCollection; 在.net 2.0 以上的版本中你必须使用type="System.Configuration.AppSettingsSection"【参考方案2】:

App.config

<configSections>
  <sectionGroup name="FileCheckers">
    <section name="FBI" type="System.Configuration.NameValueSectionHandler" />
    <section name="FSCS" type="System.Configuration.NameValueSectionHandler" />
  </sectionGroup>
</configSections>

<FileCheckers>
  <FSCS>
    <add key="processingDirectory" value="C:\testfiles\ProccesFolder"/>
  </FSCS>
  <FBI>
    <add key="processingDirectory" value="C:\testfiles\ProccesFolder"/>
  </FBI>
</FileCheckers>

示例用法

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
ConfigurationSectionGroup fileCheckersGroup = config.SectionGroups["FileCheckers"];
foreach (ConfigurationSection section in fileCheckersGroup.Sections)

    NameValueCollection sectionSettings = ConfigurationManager.GetSection(section.SectionInformation.SectionName) as NameValueCollection;
    var value = sectionSettings["processingDirectory"]

【讨论】:

请在代码之外提供一些解释。 +1 表示不只使用“var”定义。它有助于了解它的工作原理或您使用的类型。 对于未来的网络搜索者,我通过子类化创建了一个自定义 ConfigSectionGroup——这似乎是错误的,因为此代码试图从 .NET 配置命名空间加载类,这导致了 TypeLoadException。进一步检查代码后,似乎没有必要。 如果您收到 TypeInitializationException,请确保 configSections 元素是配置元素的第一个子元素。也应该只有 1 个。

以上是关于您如何使用 c# 4.0 app.config 中的部分?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C# 中配置 app.config 文件? [复制]

如何使用 configurationManager 从 .Net 4.0 中的 App.config 读取值?

如何在 C# 中使用 app.config 文件定义连接字符串 [重复]

如何从 C# 读取 VB.NET 项目中的“app.config”文件

如何在 C# 中更新 app.config 连接字符串数据源值?

C#:需要帮助加密 app.config 中的连接字符串并将其保存在那里并解密并使用?