0

我有自定义System.Configuration.ConfigurationSection派生类,它代表我的app.config文件中的配置部分。我也有xsd该 XML 文档的模式文档。配置文件具有以下(简化的)结构:

<?xml version="1.0" encoding="utf-8" ?>

<configuration>

  <configSections>

    <section name="sectionOne" type="/*...*/" />
    <section name="sectionTwo" type="/*...*/" />
    <section name="sectionThree" type="/*...*/" />

  </configSections>

  <sectionOne xmlns="http://tempuri.org/MySchema.xsd">

    <Container>

        /*...*/

    </Container>

  </sectionOne >

  <sectionTwo xmlns="http://tempuri.org/MySchema.xsd">

    <Container>

        /*...*/

    </Container>

  </sectionTwo >

  <sectionThree xmlns="http://tempuri.org/MySchema.xsd">

    <Container>

        /*...*/

    </Container>

  </sectionThree >

</configuration>

正如我们所看到的,我有几个该类型的部分,用于各种目的,我使用ConfigurationManager类检索配置数据:

ConfigurationManager.GetSection(sectionName);

因为部分名称不是常量字符串值,所以xsd模式仅验证作为根元素的子元素的元素(从Container标记开始)。因此,在 VS2012 中,在错误列表工具栏中,我收到以下消息:

Could not find schema information for the element 'http://tempuri.org/MySchema.xsd:SectionOne'.

Could not find schema information for the element 'http://tempuri.org/MySchema.xsd:SectionTwo'.

Could not find schema information for the element 'http://tempuri.org/MySchema.xsd:SectionThree'.

如何修复该验证机制。

4

1 回答 1

1

没有不涉及更改 XSD 的解决方案:不可能编写与具有任意名称的元素匹配的架构。必须明确指定所有可能的有效元素名称,因此要正确验证,必须将部分元素的名称添加到http://tempuri.org/MySchema.xsd架构或DotNetConfig.xsd.

于 2013-08-22T15:01:25.017 回答