[英]ConfigurationSection ConfigurationManager.GetSection() always returns null
我正在尝试学习如何使用ConfigurationSection类。 我曾经使用IConfigurationSectionHandler,但发布它已被折旧。 因此,作为一个好孩子,我正在尝试“正确”的方式。 我的问题是它总是返回null。
我有一个控制台应用程序和DLL。
class Program
{
static void Main(string[] args)
{
StandardConfigSectionHandler section = StandardConfigSectionHandler.GetConfiguration();
string value = section.Value;
}
}
app配置:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<sectionGroup name="ConfigSectionGroup">
<section name="ConfigSection" type="Controller.StandardConfigSectionHandler, Controller" />
</sectionGroup>
</configSections>
<ConfigSectionGroup>
<ConfigSection>
<test value="1" />
</ConfigSection>
</ConfigSectionGroup>
</configuration>
DLL中的section处理程序:
namespace Controller
{
public class StandardConfigSectionHandler : ConfigurationSection
{
private const string ConfigPath = "ConfigSectionGroup/ConfigSection/";
public static StandardConfigSectionHandler GetConfiguration()
{
object section = ConfigurationManager.GetSection(ConfigPath);
return section as StandardWcfConfigSectionHandler;
}
[ConfigurationProperty("value")]
public string Value
{
get { return (string)this["value"]; }
set { this["value"] = value; }
}
}
}
什么值我尝试“ConfigPath”它将返回null,或抛出错误说“test”是一个无法识别的元素。 我试过的价值观:
您的代码存在一些问题。
你总是在你的GetConfiguration
方法中返回null
,但我会假设这只是问题,而不是你的实际代码。
更重要的是, ConfigPath
值的格式不正确。 你有一个尾部斜杠ConfigSectionGroup/ConfigSection/
,删除最后一个斜杠,它将能够找到该部分。
最重要的是,您在配置系统中声明您的部分的方式将期望您的“值”存储在ConfigSection
元素的属性中。 像这样
<ConfigSectionGroup> <ConfigSection value="foo" /> </ConfigSectionGroup>
所以,把它们放在一起:
public class StandardConfigSectionHandler : ConfigurationSection
{
private const string ConfigPath = "ConfigSectionGroup/ConfigSection";
public static StandardConfigSectionHandler GetConfiguration()
{
return (StandardConfigSectionHandler)ConfigurationManager.GetSection(ConfigPath);
}
[ConfigurationProperty("value")]
public string Value
{
get { return (string)this["value"]; }
set { this["value"] = value; }
}
}
要阅读有关如何配置配置部分的更多信息,请参阅此优秀的MSDN文档: 如何:使用ConfigurationSection创建自定义配置部分 。 它还包含有关如何在(与测试元素)的子元素中存储配置值的信息。
我遇到了类似的问题:
ConfigurationManager.GetSection("CompaniesSettings")
我的配置文件:
<section name="CompaniesSettings" type="Swedbank2015.CompaniesSectionReader, Swedbank2015"/>
我收到一个错误:
无法加载文件或程序集'Swedbank2015'
我找到了有趣的解决方案,我将类文件移动到一个单独的项目中(type = Class Library,name = SwBankConfigHelper)。 我将它添加到参考并更改配置文件:
<section name="CompaniesSettings" type=" SwBankConfigHelper.CompaniesSectionReader, SwBankConfigHelper"/>
我的代码工作正常!
CompaniesConfig = new CompaniesConfig((XmlNodeList)ConfigurationManager.GetSection("CompaniesSettings"));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.