我正在使用 Configuration Section Designer为 .NET 构建一个简单的 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
属性,但是单例实例和设置类的实例似乎都不起作用 - 对于 ID 属性,
Is Key
属性设置为 true,所有其他属性都为Is Required
标记为 true>
有没有人遇到过这个?如果是这样,我必须进行哪些更改才能使其按预期工作?
最佳答案
好吧,我通过将问题具体化到一个特定的元素而使真正的问题变得过于复杂,结果发现即使是 ConfigurationSection
上的简单测试属性也不会返回预期值。我还意识到我无法访问 AppSettings
,这导致了一条严重的线索。
终极原因?该项目被编译为一个类库。配置文件是 only available at the application level .由于我使用 NUnit 来运行测试,测试项目的配置文件覆盖了类库的开发配置文件。这对于任何不局限于 ASP.NET 领域的开发人员来说可能是显而易见的。
通过将以下 configSection
添加到测试项目中的 app.config
中:
<section name="customConfigSection" type="ClassLibraryNamespace.SettingsClass, ClassLibraryNamespace"/>
并填写相应的部分,数据就可以正常访问了。
希望这会节省一些调试时间。
关于.NET 配置部分设计器 - 我的集合在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/737946/