Как решить проблему “Не удалось найти информацию о схеме для элемента / атрибута <xxx>”?

StackOverflow https://stackoverflow.com/questions/179927

Вопрос

В Visual Studio у меня есть проект asp.net 3.5, в котором используются блоки приложений MS Enterprise Library 4.0.

Когда я открываю свой файл web config, мой список ошибок заполняется 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, они исчезнут (но они вернутся, как только мне нужно будет снова открыть файл).

После некоторого поиска я обнаружил, что это связано с отсутствием файла XSD или схемы, который необходим Visual Studio для правильного "понимания" схемы, которая находится в файле web.config, и предоставления intellisense для нее.

Кто-нибудь знает, как либо предоставить VS соответствующую информацию о схеме, либо отключить эти сообщения?

@Franci - Спасибо за информацию, я пробовал этот инструмент, а также оснастку MMC (они, как правило, искажают форматирование в Web.config), но они по-прежнему не устраняют раздражающие предупреждения, которые я получаю.Спасибо, что попытались.

Это было полезно?

Решение

Я настроил app.config с помощью инструмента для настройки EntLib и настроил мой блок 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 с надписью " Создать схему " и xsd схема была создана для меня.

Сохраните схему в подходящем месте и просмотрите раздел «Свойства». вкладка файла app.config, где есть свойство с именем Schemas. Если вы нажмете кнопку «Изменить», вы сможете использовать как оригинальную схему dotnetconfig, так и вашу собственную вновь созданную схему.

XSD входит в состав EntLib 5 и устанавливается в каталоге схемы Visual Studio.В моем случае это можно было бы найти по адресу:

"C:\Program Файлы (x86)\Microsoft Visual Studio 10.0\Xml\Schemas\EnterpriseLibrary.Конфигурация.xsd"

КОНТЕКСТ

  • Visual Studio 2010
  • Корпоративная библиотека 5

ШАГИ ПО УДАЛЕНИЮ ПРЕДУПРЕЖДЕНИЙ

  1. откройте app.config в вашем проекте Visual Studio
  2. щелкните правой кнопкой мыши в редакторе XML-документа, выберите "Свойства".
  3. добавьте полный путь к "EnterpriseLibrary.Configuration.xsd".

В СТОРОНУ

Стоит повторить, что эти "Сообщения со списком ошибок" ("Не удалось найти информацию о схеме для элемента") видны только при открытии файла app.config.Если вы "Закроете все документы" и скомпилируете...никаких сообщений получено не будет.

Вы пытались скопировать файл схемы в папку кэширования схемы XML для VS? Вы можете найти расположение этой папки, выбрав VS Tools / Options / Test Editor / XML / Miscellaneous. К сожалению, я не знаю, где находится файл схемы для MS Enterprise Library 4.0.

Обновление : после установки библиотеки MS Enterprise, похоже, нет файла .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>

Вам также необходимо добавить ссылку на соответствующую сборку в вашем проекте.

Что исправило "Не удалось найти информацию о схеме для элемента ..." для меня было

  • Открывая свой app.config.
  • Щелкните правой кнопкой мыши в окне редактора и выберите Properties.
  • В поле свойств есть строка с именем Schemas, Я щелкнул по этой строке и выбрал пункт Обзор ... поле, которое появляется в строке.
  • Я просто проверил use поле для всех строк, в которых где-то был мой проект, а также для текущей версии .Net, которую я использовал.Например: DotNetConfig30.xsd.

После этого все стало работать нормально.

Я не уверен, как эти строки схемы в моем проекте оказались непроверенными, но когда я убедился, что они были проверены, я вернулся к делу.

scroll top