элемент nuget 'packages' не объявлен как предупреждение

106

не showstopper, но при использовании nuget в проекте он создает файл package.config с этой формой

<?xml version="1.0" encoding="utf-8"?>
<packages>
   ... your packages
</packages> 

это дает предупреждение в VS

The 'packages' element is not declared.

Происхождение проблемы как-то связано с объявлением xml.

Также я думаю, что пакет определения по умолчанию не должен вызывать предупреждения.

Кто-нибудь знает, что я должен изменить, чтобы я не получил это предупреждение? (т.е. даже если я вижу это только в том случае, если файл открыт, он также постоянно отображается как предупреждение с некоторыми правилами CA.)

  • 3
    Я нашел [это решение] [1] для этой темы, что я считаю лучше. [1]: stackoverflow.com/questions/2833243/…
  • 1
    тб реальное решение состоит в том, чтобы добавить официальную схему ... пожалуйста, смотрите мой ответ ниже
Показать ещё 1 комментарий
Теги:
visual-studio
nuget

5 ответов

79
Лучший ответ

Вы всегда можете сделать простую схему xsd для 'packages.config', чтобы избавиться от этого предупреждения. Для этого создайте файл с именем "packages.xsd":

<?xml version="1.0" encoding="utf-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"
      targetNamespace="urn:packages" xmlns="urn:packages">
  <xs:element name="packages">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="package" maxOccurs="unbounded">
          <xs:complexType>
            <xs:attribute name="id" type="xs:string" use="required" />
            <xs:attribute name="version" type="xs:string" use="required" />
            <xs:attribute name="targetFramework" type="xs:string" use="optional" />
            <xs:attribute name="allowedVersions" type="xs:string" use="optional" />
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

Местоположение этого файла (два варианта)

  • В той же папке, что и файл packages.config,
  • Если вы хотите разделить packages.xsd на несколько проектов, переместите его в папку Visual Studio Schemas (путь может немного отличаться, это D:\Program Files (x86)\Microsoft Visual Studio 10.0\Xml\Schemas для меня).

Затем отредактируйте тег <packages> в packages.config файле (добавьте атрибут xmlns):

<packages xmlns="urn:packages">

Теперь предупреждение должно исчезнуть (даже если в Visual Studio открыт файл package.config).

  • 1
    Не нужно ли изменять вторую строку XSL: <xs: schema xmlns: xs = " w3.org/2001/XMLSchema " targetNamespace = "urn: packages" xmlns = "urn: packages">
  • 0
    @ Ури, хорошая мысль, я обновил схему.
Показать ещё 12 комментариев
153

Вы увидите это только в том случае, если файл открыт. Когда вы закроете файл в Visual Studio, предупреждения исчезнут.

http://nuget.codeplex.com/discussions/261638

  • 7
    Ха, игнорирование проблемы заставляет ее уйти: D. Но может ли то, что ты не видишь, причинить тебе боль?
  • 5
    правильно @gregory мы должны игнорировать это .. есть другое влияние этого предупреждения. Он генерируется nuget и nuget знает, как использовать этот файл очень хорошо.
Показать ещё 4 комментария
85

На самом деле правильный ответ на этот вопрос заключается в том, чтобы просто добавить схему в ваш документ, например

<packages xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">

... и все готово:)

Если XSD еще не кэширован и недоступен, вы можете добавить его следующим образом из консоли NuGet

Install-Package NuGet.Manifest.Schema -Version 2.0.0

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

%VisualStudioPath%\Xml\Schemas
  • 0
    Почему я не могу перейти по этому URL?
  • 4
    Вы правы, когда говорите, что рассматриваемый xsd в настоящее время недоступен, поскольку, по их определению W3C, как бы вводящему в заблуждение, объявление xmlns (namespace) было не чем иным, как строкой в форме URI, и не требуется и не предлагается, чтобы ресурс действительно был там доступен ( en.wikipedia.org/wiki/XML_namespace )
Показать ещё 9 комментариев
4

Ни один из ответов не решит вашу проблему навсегда. Если вы перейдете на путь добавления XSD (из меню Xml, выберите "Создать схему" ), у вас возникнут проблемы с менеджером пакетов, так как он очистит ваш файл package.config при добавлении нового пакета.

Лучшее решение просто игнорируется, закрывая файл, когда вы его не используете.

  • 0
    +1; просто знайте, что это также работает (и не сломает менеджер пакетов).
4

Это происходит потому, что VS не знает схему этого файла. Обратите внимание, что этот файл больше связан с реализацией, а не с тем, что вам обычно нужно открывать напрямую. Вместо этого вы можете использовать диалог NuGet для управления пакетами, установленными в проекте.

  • 0
    Неважно, что вы используете NuGet для установки пакетов. Создается тот же файл packages.config, который генерирует предупреждение компилятора.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню