Das Nuget-Element 'packages' wird nicht als Warnung deklariert

142

Kein Showstopper, aber bei Verwendung von Nuget in einem Projekt wird eine packages.config-Datei mit dieser Form erstellt

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

Dies gibt eine Warnung in VS

The 'packages' element is not declared.

Der Ursprung des Problems hat vermutlich etwas mit der XML-Deklaration zu tun.

Ich denke auch, dass das Standarddefinitionspaket keine Warnungen auslösen sollte.

Weiß jemand, was ich ändern soll, damit ich diese Warnung nicht bekomme? (dh selbst wenn ich es nur sehen kann, wenn die Datei geöffnet ist, wird es als Warnung ständig angezeigt, wenn bestimmte CA-Regeln aktiviert sind.)

Rundkrise
quelle
3
Ich habe [diese Lösung] [1] für dieses Thema gefunden, was ich für besser halte. [1]: stackoverflow.com/questions/2833243/…
Mario Lopez
1
Die wirkliche Lösung besteht darin, das offizielle Schema hinzuzufügen ... siehe meine Antwort unten
Stefan Z Camilleri
Hier ist die entsprechende Ausgabe auf Github: github.com/NuGet/Home/issues/1836
Dimaaan

Antworten:

96

Sie können jederzeit ein einfaches xsd-Schema für 'packages.config' erstellen, um diese Warnung zu entfernen. Erstellen Sie dazu die Datei "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>

Speicherort dieser Datei (zwei Optionen)

  • Im selben Ordner wie die Datei 'packages.config'
  • Wenn Sie packages.xsdmehrere Projekte gemeinsam nutzen möchten , verschieben Sie sie in den Ordner "Visual Studio-Schemas" (der Pfad kann geringfügig abweichen, er ist D:\Program Files (x86)\Microsoft Visual Studio 10.0\Xml\Schemasfür mich).

Bearbeiten Sie dann das <packages>Tag in der packages.configDatei ( xmlnsAttribut hinzufügen ):

<packages xmlns="urn:packages">

Jetzt sollte die Warnung verschwinden (auch wenn die Datei packages.config in Visual Studio geöffnet ist).

Łukasz Wiatrak
quelle
1
Sie müssen die zweite Zeile der XSL nicht ändern: <xs: schema xmlns: xs = " w3.org/2001/XMLSchema " targetNamespace = "urn: packages" xmlns = "urn: packages">
Uri
1
Wissen Sie, warum Visual Studio diese xsd-Datei nicht erstellt?
Anders Lindén
1
u targetFrameworkAttribut in XML-Schemadatei verpasst . Ich targetFramework attribute is not defined
bekomme
2
Ich stellte fest, dass die NuGet-Konsole bei Verwendung Ihrer Lösung mit dem Entity-Framework meine package.config nicht korrekt analysieren konnte, und teilte mir immer wieder mit, dass das EnitityFramework-Paket nicht in meinem Projekt installiert war. Ich verwende EF 6.1.0 mit NuGet 2.8.50313.46 auf VS2013 Ultimate Update 2.
Misterfrb
7
Diese Lösung unterbricht die automatische Installation fehlender Pakete in vs2012 / nuget. Die Warnung war weg, aber es hat mich Stunden gekostet herauszufinden, warum vs2012 fehlende Pakete nicht mehr installiert. Die bessere Lösung (Antwort in stackoverflow.com/questions/2833243/… ) besteht darin, ein Schema über das Menü XML -> Schema erstellen zu erstellen (im Vergleich zu 2012 wird es automatisch zur Liste der verwendeten Schemas hinzugefügt) - ohne dass das geändert werden muss. Konfiguration, keine Unterbrechung anderer Funktionen
outofmind
188

Sie sehen es nur, wenn die Datei geöffnet ist. Wenn Sie die Datei in Visual Studio schließen, werden die Warnungen ausgeblendet

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

Tzvi Gregory Kaidanov
quelle
8
Ha, das Problem zu ignorieren, lässt es verschwinden: D. Aber kann dich das, was du nicht sehen kannst, verletzen?
JSideris
5
right @gregory wir sollten dies ignorieren .. es gibt andere Auswirkungen dieser Warnung. Es wird von generiert nugetund nugetweiß, wie man diese Datei sehr gut verwendet.
Shashwat
Ja, das sollte die akzeptierte Antwort sein. Das obige ist einer der Gründe, warum ich bei der Arbeit eine Perücke tragen muss.
Neilhighley
@neilhighley Danke Jungs. Ich erinnere mich nicht ganz an das Problem, bin aber froh, dass ich helfen konnte. LOL
Tzvi Gregory Kaidanov
@ RyanRodemoyer Danke Jungs. Ich erinnere mich nicht ganz an das Problem, bin aber froh, dass ich helfen konnte. LOL
Tzvi Gregory Kaidanov
116

Eigentlich ist die richtige Antwort darauf, einfach das Schema wie folgt zu Ihrem Dokument hinzuzufügen

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

...und du bist fertig :)

Wenn die XSD noch nicht zwischengespeichert und nicht verfügbar ist, können Sie sie wie folgt über die NuGet-Konsole hinzufügen

Install-Package NuGet.Manifest.Schema -Version 2.0.0

Sobald dies erledigt ist, möchten Sie es, wie in einem Kommentar unten angegeben, möglicherweise aus Ihrem aktuellen Ordner in den offiziellen Schemaordner verschieben, der sich in befindet

%VisualStudioPath%\Xml\Schemas
Stefan Z Camilleri
quelle
Wie kommt es, dass ich nicht zu dieser URL gehen kann?
Andrew
4
Sie haben Recht, wenn Sie sagen, dass auf die betreffende xsd derzeit nicht zugegriffen werden kann. Laut ihrer W3C-Definition ist die xmlns-Deklaration (Namespace) nur eine Zeichenfolge in Form einer URI Es ist weder erforderlich noch vorgeschlagen, dass eine Ressource dort tatsächlich verfügbar gemacht wird ( en.wikipedia.org/wiki/XML_namespace )
Stefan Z Camilleri
1
Ja, definitiv ist es die xsd selbst. Visual Studio validiert das Schema nicht wirklich. Es ist die Bibliothek / Assembly, die das XML-Dokument verwendet, das die Validierung durchführt. Der einzige Grund, warum VS diese Informationen benötigt, ist die Bereitstellung von Intellisense. Wenn die Ressource nicht gefunden werden kann, verwendet VS möglicherweise eine vorab zwischengespeicherte Instanz von xsd, die in% VsInstallDir% \ xml \ Schemas
Stefan Z Camilleri vom
4
Jetzt erhalte ich 13 Info-Nachrichten ("Schemainfo konnte nicht gefunden werden ...") anstelle von nur einer Warnmeldung ... fühlt sich wie ein Schritt zurück an :-)
Riegardt Steyn
1
Bemerkenswerterweise hatte ich kürzlich Probleme beim Hinzufügen dieser Namespaces, die NuGet vermasseln. Es ist bedauerlich, dass ich die Warnungen lieber nicht habe.
Meh-UK
7

Keine der Antworten wird Ihr Problem dauerhaft lösen. Wenn Sie zum Pfad zum Hinzufügen von XSD gehen (wählen Sie im XML-Menü die Option "Schema erstellen"), treten Probleme mit dem Paketmanager auf, da er Ihre Datei packages.config bereinigt, wenn Sie ein neues Paket hinzufügen.

Die beste Lösung ist, sie einfach zu ignorieren, indem Sie die Datei schließen, wenn Sie sie nicht verwenden.

Baris
quelle
+1; Beachten Sie jedoch, dass dies auch funktioniert (und den Paketmanager nicht beschädigt).
Rsenna
5

Das Problem ist, dass Sie ein xsd-Schema für benötigen packages.config.

So können Sie ein Schema erstellen ( ich habe es hier gefunden) :

Öffnen Sie Ihre Konfigurationsdatei -> XML -> Schema erstellen

Geben Sie hier die Bildbeschreibung ein

Dies würde ein packages.xsdfür Sie erstellen und es in Visual Studio öffnen:

Geben Sie hier die Bildbeschreibung ein

In meinem Fall packages.xsdwurde unter diesem Pfad erstellt:

C: \ Benutzer \ MyUserName \ AppData \ Local \ Temp

Jetzt möchte ich nicht auf das packages.xsdaus einem temporären Ordner verweisen , aber ich möchte, dass es meiner Lösung hinzugefügt und der Quellcodeverwaltung hinzugefügt wird, damit andere Benutzer es erhalten können ... also habe ich es kopiert packages.xsdund in meinen Lösungsordner eingefügt. Dann habe ich die Datei zu meiner Lösung hinzugefügt:

1. Kopieren Sie packages.xsdin denselben Ordner wie Ihre Lösung

2. Klicken Sie in VS mit der rechten Maustaste auf Lösung -> Hinzufügen -> Vorhandenes Element ... und fügen Sie dann hinzupackages.xsd

Geben Sie hier die Bildbeschreibung ein

Jetzt haben wir es erstellt packages.xsdund der Lösung hinzugefügt. Alles, was wir tun müssen, ist der Konfigurationsdatei mitzuteilen, dass sie dieses Schema verwenden soll.

Öffnen Sie die Konfigurationsdatei und wählen Sie im oberen Menü Folgendes aus:

XML -> Schemata ...

Fügen Sie Ihre hinzu packages.xsdund wählen Sie Dieses Schema verwenden (siehe unten).

Geben Sie hier die Bildbeschreibung ein

Hooman Bahreini
quelle
4

Dies geschieht, weil VS das Schema dieser Datei nicht kennt. Beachten Sie, dass diese Datei eher ein Implementierungsdetail ist und normalerweise nicht direkt geöffnet werden muss. Stattdessen können Sie das NuGet-Dialogfeld verwenden, um die in einem Projekt installierten Pakete zu verwalten.

David Ebbo
quelle
Es spielt keine Rolle, dass Sie NuGet zum Installieren von Paketen verwenden. Die gleiche Datei "packages.config" wird erstellt und generiert weiterhin diese Compiler-Warnung.
ProfK
0

Dies funktioniert und bleibt auch nach dem Hinzufügen eines neuen Pakets bestehen:

Fügen Sie über dem Element <packages> Folgendes hinzu! 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>
]>
chuckc
quelle