gpt4 book ai didi

c# - 将自定义部分保存到配置文件

转载 作者:行者123 更新时间:2023-11-30 16:16:15 25 4
gpt4 key购买 nike

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

<customSection>
<settings>
<setting key="" value="" />
<setting key="" value=""/>
...
</settings>
</customSection>

我创建了以下代码,但在第一次运行时我无法让它使用我传递的值创建结构!

下面是初始化此配置代码并使用值构建默认结构的代码:

ConfigurationSectionManager config = new ConfigurationSectionManager("CustomSection");
config.CreateDefaultConfigurationSection("CustomSection");
Log("Get value = " + (config.GetSection() as ConfigurationSectionManager).Settings[1].Value); //instead of [1] a key should be set ...

现在是配置部分管理器的代码:

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)

所以基本上我无法创 build 置等......

有人知道如何使所有这些工作正常吗?

最佳答案

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

关于c# - 将自定义部分保存到配置文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18607394/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com