nuget елемент "пакети" не оголошено попередженням


142

не showstopper, але, використовуючи nuget в проекті, він створює файл Packa.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
tbh справжнє рішення - додати офіційну схему ... pls дивіться мою відповідь нижче
Stefan Z Camilleri

Ось відповідне питання про github: github.com/NuGet/Home/isissue/1836
dimaaan

Відповіді:


96

Ви завжди можете зробити просту xsd схему для 'пакети.config', щоб позбутися цього попередження. Для цього створіть файл під назвою "пакети.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>

Розташування цього файлу (два варіанти)

  • У тій самій папці, що і файл 'пакети.config',
  • Якщо ви хочете ділитися packages.xsdв декількох проектах, перенесіть його в папку «Схеми Visual Studio» (шлях може трохи відрізнятися, це D:\Program Files (x86)\Microsoft Visual Studio 10.0\Xml\Schemasдля мене).

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

<packages xmlns="urn:packages">

Тепер попередження має зникнути (навіть якщо файл пакунків.config відкритий у Visual Studio).


1
Чи не потрібно змінювати другий рядок XSL: <xs: schema xmlns: xs = " w3.org/2001/XMLSchema " targetNamespace = "urn: пакети" xmlns = "urn: пакети">
Uri

1
Чи знаєте ви, чому Visual Studio не створює цей xsd файл?
Андерс Лінден

1
u пропущений targetFrameworkатрибут у файлі схеми xml. Я отримую помилкуtargetFramework attribute is not defined
shashwat

2
Я виявив, що, використовуючи ваше рішення з суттю фреймворку, консоль NuGet не міг правильно розібрати мій package.config, і постійно говорив мені, що пакет EnitityFramework не встановлений у моєму проекті. Я використовую EF 6.1.0 з NuGet 2.8.50313.46 для остаточного оновлення
VS2013

7
Це рішення порушує функцію автоматичного встановлення відсутніх пакетів у vs2012 / nuget. Попередження пропало, але мені знадобилося кілька годин, щоб дізнатися, чому vs2012 більше не встановлює відсутні пакети. Отже, кращим рішенням (відповідь у stackoverflow.com/questions/2833243/… ) є створення схеми за допомогою меню XML -> Створити схему (проти 2012 року автоматично додасть її до списку використаних схем) - не потрібно змінювати. конфігурація, без перерви інших функцій
поза увагою

188

Ви побачите його лише тоді, коли файл відкритий. Коли ви закриєте файл у Visual Studio, попередження пропадає

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


8
Ха, ігнорування проблеми змушує її піти: D. Але чи може те, що ви не бачите, шкодить вам?
JSideris

5
Право @gregory ми повинні ігнорувати це. Є й інший вплив цього попередження. Він створений nugetі nugetзнає, як дуже добре використовувати цей файл.
shashwat

Так, це має бути прийнята відповідь. Описане вище - одна з причин, чому мені доводиться носити перуку на роботі.
neilhighley

@neilhighley Дякую, хлопці Не дуже пам’ятаю це питання, але радий, що можу допомогти. LOL
Цві Григорій Кайданов

@RyanRodemoyer Спасибі хлопці Не дуже пам’ятаю це питання, але радий, що можу допомогти. LOL
Цві Григорій Кайданов

116

Насправді правильна відповідь на це полягає в тому, щоб просто додати схему до вашого документа, як так

<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

Чому я не можу перейти на цю URL-адресу?
andrewb

4
Ви вірно стверджуєте, що розглянутий xsd наразі недоступний, що, згідно з їх визначенням W3C, настільки ж вводить в оману декларацію xmlns (простір імен) - це не що інше, як рядок у вигляді URI, і не потрібно і не пропонується, щоб ресурс був фактично доступний для цього ( en.wikipedia.org/wiki/XML_namespace )
Stefan Z Camilleri

1
Так, напевне, це саме xsd. Visual Studio насправді не підтверджує схему, саме бібліотека / збірка використовує XML-документ, який здійснить перевірку. Єдина причина, чому VS потребує цієї інформації, - це забезпечення інтелігенції. Якщо ресурс неможливо знайти, VS може використовувати попередньо кешований екземпляр xsd, який можна знайти у% VsInstallDir% \ xml \ Schemas
Stefan Z Camilleri

4
Тому зараз я отримую 13 інформаційних повідомлень ("Не вдалося знайти інформацію про схему ..."), а не лише одне попереджувальне повідомлення ... подібне відчуває себе як крок назад :-)
Riegardt Steyn

1
Зверніть увагу, що нещодавно у мене виникли проблеми з додаванням цих просторів імен, які викручували NuGet. Це прикро, оскільки я вважаю за краще не мати попереджень.
meh-uk

7

Жодна з відповідей не вирішить вашу проблему назавжди. Якщо ви перейдете до шляху додавання XSD (у меню Xml виберіть "Створити схему"), у вас виникнуть проблеми з менеджером пакунків, оскільки він очистить файл пакунків.config, коли ви додасте новий пакет.

Найкраще рішення - просто ігнорувати, закриваючи файл, коли ви не використовуєте його.


+1; просто пам’ятайте, що це також працює (і не порушить менеджера пакунків).
rsenna

5

Проблема в тому, що вам потрібна схема xsd packages.config.

Ось як можна створити схему ( я її знайшов тут) :

Відкрийте файл Config -> XML -> Створити схему

введіть тут опис зображення

Це створить packages.xsdдля вас і відкриє його у Visual Studio:

введіть тут опис зображення

У моєму випадку packages.xsdстворено за цим шляхом:

C: \ Користувачі \ MyUserName \ AppData \ Local \ Temp

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

1. Скопіюйте packages.xsdв ту саму папку, що і ваше рішення

2. У VS клацніть правою кнопкою миші рішення -> Додати -> Існуючий елемент ..., а потім додайтеpackages.xsd

введіть тут опис зображення

Отже, зараз ми створили packages.xsdта додали його до Рішення. Все, що нам потрібно зробити, - це сказати конфігураційному файлу використовувати цю схему.

Відкрийте конфігураційний файл, а потім у верхньому меню виберіть:

XML -> Схеми ...

Додайте свій packages.xsdі виберіть Використовувати цю схему (див. Нижче)

введіть тут опис зображення


4

Це відбувається тому, що VS не знає схеми цього файлу. Зауважте, що цей файл - це більше детальна інформація про реалізацію, а не те, що вам зазвичай потрібно безпосередньо відкривати. Натомість ви можете використовувати діалогове вікно NuGet для керування пакетами, встановленими в проекті.


Не має значення, що ви використовуєте NuGet для встановлення пакетів. Вбудований той самий файл `package.config ', і він все ще генерує попередження компілятора.
ПрофК

0

Це працює і залишається навіть після додавання нового пакета:

Додайте наступне! DOCTYPE над елементом <packges>:

<?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>
]>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.