代码之家  ›  专栏  ›  技术社区  ›  John Rasch

.NET配置节设计器-我的集合在哪里?

  •  2
  • John Rasch  · 技术社区  · 16 年前

    我正在使用 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 A 配置元素集合 和A ConfigurationElement -没有其他配置元素/节/组
    • 我不会在运行时添加或删除任何内容
    • 我尝试了生成和不生成 Singleton 属性,但singleton实例和settings类的实例似乎都不起作用
    • 对于id属性, Is Key 属性设置为true,所有其他属性都标记为true Is Required

    有人碰到过这个吗?如果是这样的话,我需要做什么改变才能使它按预期工作?

    1 回复  |  直到 12 年前
        1
  •  7
  •   John Rasch    16 年前

    好吧,我通过将问题指定给一个特定的元素来严重地过度复杂了真正的问题,当它在 ConfigurationSection 将返回预期值。我也意识到我不能进入 AppSettings 这导致了一个强烈的线索。

    最终原因是什么?该项目被编译为类库。配置文件是 only available at the application level . 因为我使用nunit来运行测试,所以测试项目中的配置文件覆盖了类库的开发文件。这对于任何没有陷入ASP.NET领域的开发人员来说都是显而易见的。

    通过添加以下内容 configSection app.config 在测试项目中:

    <section name="customConfigSection" type="ClassLibraryNamespace.SettingsClass, ClassLibraryNamespace"/>
    

    并填写相应的部分,可以按预期访问数据。

    希望这样可以节省一些调试时间。