c#-将自定义部分保存到配置文件
作者:互联网
我有一个小问题,基本上我想在我的配置文件中达到以下结果:
<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)
所以基本上我无法创建设置等…
任何人都知道如何使所有这些工作吗?
解决方法:
您的ConfigurationSectionManager缺少默认构造函数.添加并执行.
标签:web-config,c 来源: https://codeday.me/bug/20191122/2062725.html