Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将自定义节保存到配置文件_C#_Web Config - Fatal编程技术网

C# 将自定义节保存到配置文件

C# 将自定义节保存到配置文件,c#,web-config,C#,Web Config,我有一个小问题,基本上我想在我的配置文件中实现以下结果: <customSection> <settings> <setting key="" value="" /> <setting key="" value=""/> ... </settings> </customSection> 现在,配置部分管理器的代码如下: public class ConfigurationSectionManager: Configurat

我有一个小问题,基本上我想在我的配置文件中实现以下结果:

<customSection>
<settings>
<setting key="" value="" />
<setting key="" value=""/>
...
</settings>
</customSection>
现在,配置部分管理器的代码如下:

public class ConfigurationSectionManager: ConfigurationSection
{
    private const string defaultSectionName = "Default";

    private string sectionName;
    public string SectionName 
    {
        get 
        {
            if (string.IsNullOrEmpty(sectionName))
            {
                return defaultSectionName;
            }
            return sectionName;
        }
        set
        {
            sectionName = value;
        }
    }

    public SancoConfigurationSectionManager(string sectionName)
    {
        SectionName = sectionName;
    }

    public void CreateDefaultConfigurationSection(string sectionName)
    {
        ConfigurationSectionManager defaultSection = new ConfigurationSectionManager(sectionName);
        SettingsConfigurationCollection settingsCollection = new SettingsConfigurationCollection();
        settingsCollection[0] = new SettingConfigurationElement() { Key="Element", Value="Element value" };
        settingsCollection[1] = new SettingConfigurationElement() { Key = "NewElement", Value = "NeValueElement" };
        settingsCollection[2] = new SettingConfigurationElement() { Key = "NewElement2", Value = "NeValueElement2" };
        defaultSection.Settings = settingsCollection;
        CreateConfigurationSection(sectionName, defaultSection);
    }

    public void CreateConfigurationSection(string sectionName, ConfigurationSection section)
    {
        var config = ConfigurationManager.OpenExeConfiguration(null);
        if (config.Sections[SectionName] == null)
        {
            config.Sections.Add(SectionName, section);
            section.SectionInformation.ForceSave = true;
            config.Save(ConfigurationSaveMode.Full);
        }
    }

    public object GetSection()
    {
        return ConfigurationManager.GetSection(SectionName);
    }

    public override bool IsReadOnly()
    {
        return false;
    }

    public void Save()
    {
        Configuration config = ConfigurationManager.OpenExeConfiguration(null);
        ConfigurationSectionManager instance = (ConfigurationSectionManager)config.Sections[SectionName];
        instance.Settings = this.Settings;
        config.Save(ConfigurationSaveMode.Full);
    }

    [ConfigurationProperty("Settings", IsRequired = false)]
    public SettingsConfigurationCollection Settings 
    { 
        get { return this["Settings"] as SettingsConfigurationCollection; }
        set { this["Settings"] = value; }
    }

}
现在是设置集合的代码

public class SettingsConfigurationCollection : ConfigurationElementCollection
{
    public SettingConfigurationElement this[int index] 
    { 
        get 
        { 
            return BaseGet(index) as SettingConfigurationElement; 
        } 
        set 
        { 
            if (Count > index && BaseGet(index) != null) 
            { 
                BaseRemoveAt(index); 
            } 
            BaseAdd(index, value); 
        } 
    }     

    protected override ConfigurationElement CreateNewElement() 
    { 
        return new SettingConfigurationElement(); 
    }      

    protected override object GetElementKey(ConfigurationElement element) 
    { 
        return ((SettingConfigurationElement)element).Key; 
    }
}
以及设置元素的代码

public class SettingConfigurationElement : ConfigurationElement
{
    [ConfigurationProperty("key", IsRequired = true)]
    public string Key 
    { 
        get { return this["key"] as string; }
        set { this["key"] = value; }
    }

    [ConfigurationProperty("value", IsRequired = true)]
    public string Value 
    { 
        get { return this["value"] as string; }
        set { this["value"] = value; }
    }

    public override bool IsReadOnly()
    {
        return false;
    }

}
当我尝试执行所有这些操作时,会出现一个错误:

Unable to load type 'MyApp.Utilities.ConfigurationSectionManager, MyApp, Version=1.0.0.0, Culture=neutral, PublicKeyToken=cd112ea1ee9f48f2' because it is not public.    at System.Configuration.TypeUtil.GetConstructorWithReflectionPermission(Type type, Type baseType, Boolean throwOnError)
   at System.Configuration.MgmtConfigurationRecord.AddConfigurationSection(String group, String name, ConfigurationSection configSection)
   at System.Configuration.ConfigurationSectionCollection.Add(String name, ConfigurationSection section)
所以基本上我不能创建设置等


有人知道如何完成所有这些工作吗?

您的
ConfigurationSectionManager
缺少默认构造函数。添加它并执行

Unable to load type 'MyApp.Utilities.ConfigurationSectionManager, MyApp, Version=1.0.0.0, Culture=neutral, PublicKeyToken=cd112ea1ee9f48f2' because it is not public.    at System.Configuration.TypeUtil.GetConstructorWithReflectionPermission(Type type, Type baseType, Boolean throwOnError)
   at System.Configuration.MgmtConfigurationRecord.AddConfigurationSection(String group, String name, ConfigurationSection configSection)
   at System.Configuration.ConfigurationSectionCollection.Add(String name, ConfigurationSection section)