如何解决“无法找到元素/属性的架构信息 “?

问题描述 投票:47回答:6

在visual studio中,我有一个使用MS Enterprise Library 4.0应用程序块的asp.net 3.5项目。

当我打开我的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文件,它们就会消失(但是一旦我需要再次打开文件它们就会回来)。

经过一番研究后,我发现这是因为缺少Visual Studio所需的XSD或模式文件,以便正确“理解”web.config文件中的模式并为其提供智能感知。

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

@Franci - 感谢您的信息,我已经尝试过该工具以及MMC管理单元(它们往往会破坏Web.config中的格式),但它们仍然无法解决我收到的恼人警告。谢谢你的尝试。

.net xml xsd enterprise-library
6个回答
11
投票

我使用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>

30
投票

我已根据当前的app.config创建了一个新方案,以使消息消失。我刚刚在Visual Studio中使用了“Create Schema”按钮,并为我创建了一个xsd架构。

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


13
投票

EntLib 5包含一个XSD,它安装在Visual Studio架构目录中。就我而言,它可以在以下位置找到:

“C:\ Program Files(x86)\ Microsoft Visual Studio 10.0 \ Xml \ Schemas \ EnterpriseLibrary.Configuration.xsd”

CONTEXT

  • Visual Studio 2010
  • 企业图书馆5

STEPS TO REMOVE THE WARNINGS

  1. 在Visual Studio项目中打开app.config
  2. 右键单击XML Document编辑器,选择“Properties”
  3. 将完全限定的路径添加到“EnterpriseLibrary.Configuration.xsd”

ASIDE

值得重复的是,这些“错误列表”“消息”(“无法找到元素的架构信息”)仅在您打开app.config文件时可见。如果您“关闭所有文档”并编译...将不会报告任何消息。


1
投票

您是否尝试将架构文件复制到VS的XML Schema Caching文件夹?您可以通过查看VS Tools / Options / Test Editor / XML / Miscellaneous找到该文件夹​​的位置。不幸的是,我不知道MS Enterprise Library 4.0的架构文件在哪里。

更新:安装MS Enterprise Library后,似乎没有.xsd文件。但是,有一个用于编辑配置的工具 - EntLibConfig.exe,您可以使用它来编辑配置文件。此外,如果您将正确的配置部分添加到配置文件中,VS应该能够正确解析配置文件。 (EntLibConfig将为您添加这些,或者您可以自己添加它们)。以下是loggingConfiguration部分的示例:

<configSections>
    <section name="loggingConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.LoggingSettings, Microsoft.Practices.EnterpriseLibrary.Logging, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
</configSections>

您还需要在项目中添加对相应程序集的引用。


1
投票

修复了“无法找到元素的架构信息......”的原因是

  • 打开我的app.config
  • 在编辑器窗口中单击鼠标右键,然后选择Properties
  • 在属性框中,有一行名为Schemas,我单击该行并选择出现在该行中的浏览...框。
  • 我只是检查了use框中包含我项目所在的所有行,以及我正在使用的当前版本的.Net。例如:DotNetConfig30.xsd

之后一切都运转良好。

我的项目的那些架构行如何取消选中我不确定,但是当我确定它们被检查时,我又回来了。


0
投票

导航到:NLog xsd files

下载适合您项目的xsd并将其保存在NLog.config中

第一个为我做了伎俩。

© www.soinside.com 2019 - 2024. All rights reserved.