【问题标题】:Intellisense for custom config section problem with namespacesIntellisense 用于命名空间的自定义配置部分问题
【发布时间】:2011-02-28 12:14:07
【问题描述】:

我刚刚推出了一个自定义配置部分,为 Intellisense 创建了一个随附的架构文档,并将其添加到 Web.config 的 Schemas 属性中,根据 Michael Stum's answer 另一个类似的问题。

不幸的是,可能由于我在知识有限的情况下手动创建 XSD,Intellisense 依赖于指向自定义配置元素中存在的我的 XSD 文件命名空间的 xmlns 属性。但是,在运行项目时,我得到一个 无法识别的属性“xmlns”。请注意,属性名称区分大小写错误。

我可能只是修改我的 XSD 文件来为该元素定义 xmlns 属性,但是我想知道这是否只是对更大问题的临时修复。我必须承认我对 XML 命名空间没有很好的理解,所以这可能是一个让我明白一些事情的机会。

这是我的 XSD 文件的根 xs:schema 元素的属性:

<xs:schema id="awesomeConfig"
           targetNamespace="http://awesome.com/schemas"
           xmlns="http://awesome.com/schemas"
           elementFormDefault="qualified"
           xmlns:xs="http://www.w3.org/2001/XMLSchema">
    ...
</xs:schema>

在 Web.config 文件中创建元素时,Visual Studio 2008 会自动附加:

<awesomeConfig xmlns="http://awesome.com/schemas"></awesomeConfig>

那么我是否完全误解了xs:schema 属性的含义,或者正确的解决方案是否像看起来那么简单?

【问题讨论】:

    标签: .net intellisense configurationsection


    【解决方案1】:

    您的架构需要省略targetNamespace 属性。实际上,这会将架构内容放入默认命名空间。

    这是必要的,因为 .NET 配置系统从未允许元素位于命名空间中。

    【讨论】:

    • 我是否正确地说这样做的结果是我必须避免命名冲突?如果是这样,我将如何实现添加/删除/清除的标准集合元素?
    • 如果您使用相同的语法,这些标准元素不是命名冲突。此外,模式将相对于父元素。如果您将架构的根设为配置节名称,那么只要您的架构是严格分层的,就不会有名称冲突。使添加/删除/清除元素成为其父元素的子元素,而不是稍后引用的全局元素。
    猜你喜欢
    • 2015-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-25
    • 2012-04-02
    • 2015-02-01
    • 1970-01-01
    相关资源
    最近更新 更多