如何解析“未能找到元素/属性<xxx>的架构信息”?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (104)

在VisualStudio中,我有一个ASP.NET3.5项目,它使用MSEnterpriseLibrary 4.0应用程序块。

当我打开web配置文件时,错误列表中满是99条消息,如下

Could not find schema information for the element 'dataConfiguration'.  
Could not find schema information for the attribute 'defaultDatabase'.  
Could not find schema information for the element 'loggingConfiguration'.   
Could not find schema information for the attribute 'tracingEnabled'.   
Could not find schema information for the attribute 'defaultCategory'.  

如果我关闭Web.config文件,它们就会消失(但当我需要再次打开该文件时,它们就会返回)。

做了一些调查之后,我发现这是因为VisualStudio缺少一个XSD或模式文件,以便正确地“理解”web.config文件中的模式并为其提供IntelliSense。

是否有人知道如何向VS提供适当的架构信息,或者关闭这些消息?

提问于
用户回答回答于

我使用EntLib配置工具配置了app.config,并设置了LoggingConfiguration块。然后我将它复制到DotNetConfig.xsd中。当然,它并不包含所有属性,只包括我添加的属性,但不会再显示那些烦人的信息消息。

<xs:element name="loggingConfiguration">
      <xs:complexType>
        <xs:sequence>
          <xs:element name="listeners">
            <xs:complexType>
              <xs:sequence>
                <xs:element maxOccurs="unbounded" name="add">
                  <xs:complexType>
                    <xs:attribute name="fileName" type="xs:string" use="required" />
                    <xs:attribute name="footer" type="xs:string" use="required" />
                    <xs:attribute name="formatter" type="xs:string" use="required" />
                    <xs:attribute name="header" type="xs:string" use="required" />
                    <xs:attribute name="rollFileExistsBehavior" type="xs:string" use="required" />
                    <xs:attribute name="rollInterval" type="xs:string" use="required" />
                    <xs:attribute name="rollSizeKB" type="xs:unsignedByte" use="required" />
                    <xs:attribute name="timeStampPattern" type="xs:string" use="required" />
                    <xs:attribute name="listenerDataType" type="xs:string" use="required" />
                    <xs:attribute name="traceOutputOptions" type="xs:string" use="required" />
                    <xs:attribute name="filter" type="xs:string" use="required" />
                    <xs:attribute name="type" type="xs:string" use="required" />
                    <xs:attribute name="name" type="xs:string" use="required" />
                  </xs:complexType>
                </xs:element>
              </xs:sequence>
            </xs:complexType>
          </xs:element>
          <xs:element name="formatters">
            <xs:complexType>
              <xs:sequence>
                <xs:element name="add">
                  <xs:complexType>
                    <xs:attribute name="template" type="xs:string" use="required" />
                    <xs:attribute name="type" type="xs:string" use="required" />
                    <xs:attribute name="name" type="xs:string" use="required" />
                  </xs:complexType>
                </xs:element>
              </xs:sequence>
            </xs:complexType>
          </xs:element>
          <xs:element name="logFilters">
            <xs:complexType>
              <xs:sequence>
                <xs:element name="add">
                  <xs:complexType>
                    <xs:attribute name="enabled" type="xs:boolean" use="required" />
                    <xs:attribute name="type" type="xs:string" use="required" />
                    <xs:attribute name="name" type="xs:string" use="required" />
                  </xs:complexType>
                </xs:element>
              </xs:sequence>
            </xs:complexType>
          </xs:element>
          <xs:element name="categorySources">
            <xs:complexType>
              <xs:sequence>
                <xs:element maxOccurs="unbounded" name="add">
                  <xs:complexType>
                    <xs:sequence>
                      <xs:element name="listeners">
                        <xs:complexType>
                          <xs:sequence>
                            <xs:element name="add">
                              <xs:complexType>
                                <xs:attribute name="name" type="xs:string" use="required" />
                              </xs:complexType>
                            </xs:element>
                          </xs:sequence>
                        </xs:complexType>
                      </xs:element>
                    </xs:sequence>
                    <xs:attribute name="switchValue" type="xs:string" use="required" />
                    <xs:attribute name="name" type="xs:string" use="required" />
                  </xs:complexType>
                </xs:element>
              </xs:sequence>
            </xs:complexType>
          </xs:element>
          <xs:element name="specialSources">
            <xs:complexType>
              <xs:sequence>
                <xs:element name="allEvents">
                  <xs:complexType>
                    <xs:attribute name="switchValue" type="xs:string" use="required" />
                    <xs:attribute name="name" type="xs:string" use="required" />
                  </xs:complexType>
                </xs:element>
                <xs:element name="notProcessed">
                  <xs:complexType>
                    <xs:attribute name="switchValue" type="xs:string" use="required" />
                    <xs:attribute name="name" type="xs:string" use="required" />
                  </xs:complexType>
                </xs:element>
                <xs:element name="errors">
                  <xs:complexType>
                    <xs:sequence>
                      <xs:element name="listeners">
                        <xs:complexType>
                          <xs:sequence>
                            <xs:element name="add">
                              <xs:complexType>
                                <xs:attribute name="name" type="xs:string" use="required" />
                              </xs:complexType>
                            </xs:element>
                          </xs:sequence>
                        </xs:complexType>
                      </xs:element>
                    </xs:sequence>
                    <xs:attribute name="switchValue" type="xs:string" use="required" />
                    <xs:attribute name="name" type="xs:string" use="required" />
                  </xs:complexType>
                </xs:element>
              </xs:sequence>
            </xs:complexType>
          </xs:element>
        </xs:sequence>
        <xs:attribute name="name" type="xs:string" use="required" />
        <xs:attribute name="tracingEnabled" type="xs:boolean" use="required" />
        <xs:attribute name="defaultCategory" type="xs:string" use="required" />
        <xs:attribute name="logWarningsWhenNoCategoriesMatch" type="xs:boolean" use="required" />
      </xs:complexType>
    </xs:element>
用户回答回答于

我基于当前的app.config创建了一个新的方案,以使消息消失。我使用Visual Studio中的“Create Schema”按钮,并创建了一个xsd模式。

将模式保存在适当的位置,并查看其中存在名为模式的属性的app.config文件的“属性”选项卡。如果单击更改按钮,则可以选择使用原始的dotnetconfig模式和自己的新创建的模式。

扫码关注云+社区