Элемент nuget 'packages' не объявляется предупреждением

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

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

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

The 'packages' element is not declared.

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

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

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

Ответ 1

Вы всегда можете сделать простую схему 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).

Ответ 2

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

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

Ответ 3

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

<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

Ответ 4

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

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

Ответ 5

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

Ответ 6

Проблема в том, что вам нужна схема xsd для packages.config.

Вот как вы можете создать схему (я нашел ее здесь):

Откройте файл конфигурации → XML → Создать схему

enter image description here

Это создаст для вас packages.xsd и откроет его в Visual Studio:

enter image description here

В моем случае packages.xsd был создан по этому пути:

C:\Users\MyUserName\AppData\Local\Temp

Теперь я не хочу ссылаться на packages.xsd из папки Temp, но я хочу, чтобы он был добавлен в мое решение и добавлен в систему контроля версий, чтобы другие пользователи могли его получить... поэтому я скопировал packages.xsd и вставил это в мою папку решения. Затем я добавил файл в свое решение:

1. Скопируйте packages.xsd в ту же папку, где находится ваше решение

2. В VS щелкните правой кнопкой мыши решение → Добавить → Существующий элемент..., а затем добавьте packages.xsd

enter image description here

Итак, теперь мы создали packages.xsd и добавили его в Решение. Все, что нам нужно сделать, это указать файлу конфигурации использовать эту схему.

Откройте файл конфигурации, затем в верхнем меню выберите:

XML → Схемы...

Добавьте свой packages.xsd и выберите Использовать эту схему (см. ниже)

enter image description here

Ответ 7

Кажется, это работает даже после добавления нового пакета:

Я добавил следующее! DOCTYPE над корневым элементом:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE packages [
  <!ELEMENT packages (package*)>
  <!ELEMENT package EMPTY>
  <!ATTLIST package
  id CDATA #REQUIRED
  version CDATA #REQUIRED
  targetFramework CDATA #REQUIRED
  developmentDependency CDATA #IMPLIED>
]>