The config system was unable to initialize error while loading custom section from app.config
I have defined a config section in my app.config like this:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="RegisterCompanies"
type="ConfigTest.RegisterCompaniesConfig, ConfigTest"
allowLocation="true"
allowDefinition="Everywhere"/>
</configSections>
<RegisterCompanies>
<Companies>
<Company name="Tata Motors" code="Tata"/>
<Company name="Honda Motors" code="Honda"/>
</Companies>
</RegisterCompanies>
</configuration>
To read this information, I created three classes this way: RegisterCompaniesConfig class
public class RegisterCompaniesConfig : ConfigurationSection
{
public static RegisterCompaniesConfig GetConfig()
{
string path = Path.Combine(Application.StartupPath, "ConfigTest.exe.config");
Configuration config = System.Configuration.ConfigurationManager.OpenExeConfiguration(path);
RegisterCompaniesConfig serviceSection = ConfigurationManager.GetSection("RegisterCompanies") as RegisterCompaniesConfig;
return serviceSection;
//return (RegisterCompaniesConfig)System.Configuration.ConfigurationManager.GetSection("RegisterCompanies");
}
[System.Configuration.ConfigurationProperty("Companies")]
public Companies Companies
{
get
{
object o = this["Companies"]; return o as Companies;
}
}
}
then the class of companies:
public class Companies : ConfigurationElementCollection
{
[System.Configuration.ConfigurationProperty("Company")]
public Company this[int index]
{
get
{
return base.BaseGet(index) as Company;
}
set
{
if (base.BaseGet(index) != null)
{ base.BaseRemoveAt(index); } this.BaseAdd(index, value);
}
}
protected override ConfigurationElement CreateNewElement()
{
return new Company();
}
protected override object GetElementKey(ConfigurationElement element)
{
return ((Company)element).Name;
}
}
and the last one is the company class:
public class Company : ConfigurationElement
{
[ConfigurationProperty("name", IsRequired = true)]
public string Name
{
get
{
return this["name"] as string;
}
}
[ConfigurationProperty("code", IsRequired = true)]
public string Code
{
get
{
return this["code"] as string;
}
}
}
after that when i want to execute the section by calling the following method
var config = RegisterCompaniesConfig.GetConfig();
I am getting the error: Failed to initialize the config system Please someone look at this above code where the problem is, it looks, everything is good for me ....
source to share
Running the code, I got the error: "The <Company> element can appear only once in this section" at the line:
RegisterCompaniesConfig serviceSection = ConfigurationManager.GetSection("RegisterCompanies") as RegisterCompaniesConfig;
It's like you can only have one branded element with just the code you have.
I have used the following without problems in the past:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<sectionGroup name="Libraries">
<section name="MyLibrary" type="System.Configuration.NameValueSectionHandler,system, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, Custom=null" />
</sectionGroup>
</configSections>
<Libraries>
<MyLibrary>
<add key="Test" value="Test1"/>
</MyLibrary>
</Libraries>
</configuration>
Which I got with code like:
public string GetValue(string configurationKey, string defaultValue)
{
NameValueCollection _config = (NameValueCollection)ConfigurationManager.GetSection("Libraries/MyLibrary");
string result = (_config == null) ? null : _config[configurationKey];
return (result == null ? defaultValue : result);
}
If you don't need the attributes called "name" and "code" you can just use the above code, otherwise you could use Reflector to get an idea of ββwhat the NameValueCollection does and works from there!
source to share