C# 如何以编程方式将sectionGroup添加到web.config中

C# 如何以编程方式将sectionGroup添加到web.config中,c#,app-config,C#,App Config,背景 我想在我的web.config中插入以下内容 <sectionGroup name="elmah"> <section name="security" requirePermission="false" type="Elmah.SecuritySectionHandler, Elmah"/> <section name="errorLog" requirePermission="false" type="Elmah.ErrorLogSect

背景

我想在我的web.config中插入以下内容

  <sectionGroup name="elmah">
    <section name="security" requirePermission="false" type="Elmah.SecuritySectionHandler, Elmah"/>
    <section name="errorLog" requirePermission="false" type="Elmah.ErrorLogSectionHandler, Elmah"/>
    <section name="errorMail" requirePermission="false" type="Elmah.ErrorMailSectionHandler, Elmah"/>
  </sectionGroup>
这是生成的配置文件

    <?xml version="1.0" encoding="utf-8"?>
<configuration>
    <configSections>
        <sectionGroup name="elmah" type="System.Configuration.ConfigurationSectionGroup, System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" >
            <section name="security" type="ConfigEditing.Form1+ElmahLogic+Section, ConfigEditing, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
        </sectionGroup>
    </configSections>
    <elmah>
        <security name="security" requirePermission="false" type="Elmah.SecuritySectionHandler, Elmah" />
    </elmah>
</configuration>

这完全扭曲了我的瓜:-

  • 首先,
    元素的
    类型
    是我的类的类型(派生自ConfigurationSection)
  • 其次,通过向组中添加sectionGroup定义,我(同时)将组添加到配置中

我对这些发现并不感到惊讶,因为我真的不理解API,但我只是没有找到任何关于我想做什么的像样的文档。这里的任何人都能提供帮助吗?即使它只是向我指出了一个MSDN示例,这是一个实际完整的工作示例。

一个简单的示例,它将在app.config中添加如下部分:

//<configSections>
//  <sectionGroup name="elmah" type="Overflow.CustomConfigurationSectionGroup, Overflow, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" >
//  </sectionGroup>
//</configSections>

namespace Overflow
{
    public class CustomSecuritySection : ConfigurationSection
    {
    }

    public class CustomConfigurationSectionGroup : ConfigurationSectionGroup
    {
        public CustomConfigurationSectionGroup()
        {
            Security = new CustomSecuritySection();
        }

        [ConfigurationProperty("security")] 
        public CustomSecuritySection Security { get; private set; }
    }

    class Program
    {
        static void Main(string[] args)
        {
            var config = ConfigurationManager.OpenExeConfiguration(Path.Combine(Application.StartupPath, Application.ProductName + ".exe"));

            config.SectionGroups.Add("elmah", new CustomConfigurationSectionGroup());

            config.Save(ConfigurationSaveMode.Modified);

        }
    }
}
//
//  
//  
//
命名空间溢出
{
公共类CustomSecuritySection:ConfigurationSection
{
}
公共类CustomConfigurationSectionGroup:ConfigurationSectionGroup
{
公共CustomConfigurationSectionGroup()
{
安全性=新的CustomSecuritySection();
}
[配置属性(“安全”)]
公共CustomSecuritySection安全性{get;private set;}
}
班级计划
{
静态void Main(字符串[]参数)
{
var config=ConfigurationManager.OpenExeConfiguration(Path.Combine(Application.StartupPath,Application.ProductName+“.exe”);
添加(“elmah”,新的CustomConfigurationSectionGroup());
config.Save(ConfigurationSaveMode.Modified);
}
}
}

感谢您的回复,但除了我的示例代码之外,它没有添加任何内容(除了您的示例对您创建的安全组没有任何作用)。我想这就是问题所在:如何仅将configSection添加到app.config:“我想在我的web.config中插入以下内容”。
//<configSections>
//  <sectionGroup name="elmah" type="Overflow.CustomConfigurationSectionGroup, Overflow, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" >
//  </sectionGroup>
//</configSections>

namespace Overflow
{
    public class CustomSecuritySection : ConfigurationSection
    {
    }

    public class CustomConfigurationSectionGroup : ConfigurationSectionGroup
    {
        public CustomConfigurationSectionGroup()
        {
            Security = new CustomSecuritySection();
        }

        [ConfigurationProperty("security")] 
        public CustomSecuritySection Security { get; private set; }
    }

    class Program
    {
        static void Main(string[] args)
        {
            var config = ConfigurationManager.OpenExeConfiguration(Path.Combine(Application.StartupPath, Application.ProductName + ".exe"));

            config.SectionGroups.Add("elmah", new CustomConfigurationSectionGroup());

            config.Save(ConfigurationSaveMode.Modified);

        }
    }
}