我使用.NET的Configuration Section Designer来构建一个简单的ConfigurationElementCollection
。 出现,一切都很好,代码是自动生成的,因为使用Intellisense可以看到子元素。
不幸的是,即使我在配置部分向集合添加了元素,它们在运行时也不存在;它将集合的Length
属性显示为0 - 即使集合是空的,正如您在我的示例XML中看到的那样,我已经清楚地将它们放在那里:
<logParserSettings xmlns="LogParser">
<domainControllers>
<domainController ID="0" name="Local" serverType="Local" enabled="true"/>
<domainController ID="1" name="DC1" serverType="WindowsServer2003" enabled="false" />
<domainController ID="2" name="DC2" serverType="WindowsServer2008" enabled="false" />
</domainControllers>
</logParserSettings>
ConfigurationSection
,ConfigurationElementCollection
和ConfigurationElement
- 没有其他配置元素/部分/组Singleton
属性,但单例实例和设置类的实例似乎都不起作用Is Key
属性设置为true,所有其他属性标记为Is Required
有没有人碰到这个?如果是这样,我必须做出哪些改变才能使其按预期工作?
答案 0 :(得分:8)
好吧,我通过将问题指定到特定元素来严重过度复杂化,当事实证明,ConfigurationSection
上的简单测试属性都不会返回预期值。我也意识到我无法访问AppSettings
,这导致了一个强烈的线索。
最终原因?该项目被编译为类库。配置文件为only available at the application level。由于我使用NUnit来运行测试,因此测试项目中的配置文件覆盖了类库的开发。对于那些没有陷入ASP.NET领域的开发人员来说,这可能是显而易见的。
将以下configSection
添加到测试项目中的app.config
:
<section name="customConfigSection" type="ClassLibraryNamespace.SettingsClass, ClassLibraryNamespace"/>
并填写相应的部分,可以按预期访问数据。
希望这可以节省一些时间的调试。