gpt4 book ai didi

c# - 从 app.config 加载自定义部分时配置系统无法初始化错误

转载 作者:太空宇宙 更新时间:2023-11-03 16:57:16 25 4
gpt4 key购买 nike

我已经通过以下方式在我的 app.config 中定义了一个配置部分:

    <?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>

为了阅读这些信息,我以这种方式创建了三个类:RegisterCompaniesConfig 类

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;
}
}
}

然后是公司类:

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;
}
}

最后一个是公司类:

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;
}
}
}

之后,当我想通过调用以下方法访问该部分时

var config = RegisterCompaniesConfig.GetConfig();

我得到错误:配置系统初始化失败请任何人看看上面的代码,问题出在哪里,它看起来对我来说一切都很好....

最佳答案

刚刚运行您的代码,我收到的错误是“元素 可能只出现在本节中一次”这一行:

RegisterCompaniesConfig serviceSection = ConfigurationManager.GetSection("RegisterCompanies") as RegisterCompaniesConfig;

这似乎表明您只能使用当前获得的代码在其中包含一个公司元素。

在过去,我使用以下没有任何问题:

<?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>

然后我使用如下代码访问了它:

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);
}

如果您没有具有名为“name”和“code”的属性,那么您可以只使用上面的代码,否则您可以使用 Reflector 来了解 NameValueCollection 的作用并从那里开始工作!

关于c# - 从 app.config 加载自定义部分时配置系统无法初始化错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1327083/

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