L'élément nuget 'packages' n'est pas déclaré avertissement

142

pas un showstopper mais lors de l'utilisation de nuget dans un projet, il crée un fichier packages.config avec cette forme

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

cela donne un avertissement dans VS

The 'packages' element is not declared.

L'origine du problème a quelque chose à voir avec la déclaration xml, je suppose.

Je pense également que le package de définition par défaut ne devrait pas lancer d'avertissements.

Quelqu'un sait-il par quoi dois-je le changer pour ne pas recevoir cet avertissement? (c'est-à-dire même si je ne peux le voir que lorsque le fichier est ouvert, il s'affiche également comme un avertissement en permanence avec certaines règles de CA activées.)

crise ronde
la source
3
J'ai trouvé [cette solution] [1] pour ce sujet, que je pense être meilleur. [1]: stackoverflow.com/questions/2833243/…
Mario Lopez
1
tbh la vraie solution est d'ajouter le schéma officiel ... veuillez voir ma réponse ci
Stefan Z Camilleri
Voici le numéro correspondant sur github: github.com/NuGet/Home/issues/1836
dimaaan

Réponses:

96

Vous pouvez toujours créer un schéma xsd simple pour 'packages.config' pour vous débarrasser de cet avertissement. Pour ce faire, créez un fichier nommé "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>

Emplacement de ce fichier (deux options)

  • Dans le même dossier que le fichier 'packages.config',
  • Si vous souhaitez partager packages.xsdsur plusieurs projets, déplacez-le vers le dossier Visual Studio Schemas (le chemin peut légèrement différer, c'est D:\Program Files (x86)\Microsoft Visual Studio 10.0\Xml\Schemaspour moi).

Ensuite, modifiez la <packages>balise dans le packages.configfichier (ajouter un xmlnsattribut):

<packages xmlns="urn:packages">

Maintenant, l'avertissement devrait disparaître (même si le fichier packages.config est ouvert dans Visual Studio).

Łukasz Wiatrak
la source
1
Pas besoin de modifier la deuxième ligne du XSL: <xs: schema xmlns: xs = " w3.org/2001/XMLSchema " targetNamespace = "urn: packages" xmlns = "urn: packages">
Uri
1
Savez-vous pourquoi Visual Studio ne crée pas ce fichier xsd?
Anders Lindén
1
u targetFrameworkattribut manqué dans le fichier de schéma xml. Je reçois une erreurtargetFramework attribute is not defined
shashwat
2
J'ai constaté qu'en utilisant votre solution avec le framework d'entité, la console NuGet ne pouvait pas analyser correctement mon package.config et n'arrêtait pas de me dire que le package EnitityFramework n'était pas installé dans mon projet. J'utilise EF 6.1.0 avec NuGet 2.8.50313.46 sur la mise à jour ultime 2 de
VS2013
7
Cette solution rompt l'installation automatique de la fonctionnalité de paquets manquants dans vs2012 / nuget. L'avertissement avait disparu, mais il m'a fallu des heures pour savoir pourquoi vs2012 n'installe plus les paquets manquants. Donc, la meilleure solution (réponse dans stackoverflow.com/questions/2833243/… ) est de créer un schéma via le menu XML -> Créer un schéma (vs 2012 l'ajoutera automatiquement à la liste des schémas utilisés) - pas besoin de changer le. config, pas de pause d'autres fonctionnalités
hors de l'esprit
188

Vous ne le verrez que lorsque le fichier est ouvert. Lorsque vous fermez le fichier dans Visual Studio, les avertissements disparaissent

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

Tzvi Gregory Kaidanov
la source
8
Ha, ignorer le problème le fait disparaître: D. Mais ce que vous ne pouvez pas voir peut-il vous blesser?
JSideris
5
right @gregory nous devrions ignorer cela .. il y a un autre impact de cet avertissement. Il est généré par nugetet nugetsait très bien utiliser ce fichier.
shashwat du
Ouais, ça devrait être la réponse acceptée. Celle ci-dessus est l'une des raisons pour lesquelles je dois porter une perruque au travail.
neilhighley
@neilhighley Merci les gars. Je ne me souviens pas très bien du problème, mais je suis content de pouvoir aider. LOL
Tzvi Gregory Kaidanov
@RyanRodemoyer Merci les gars. Je ne me souviens pas très bien du problème, mais je suis content de pouvoir aider. LOL
Tzvi Gregory Kaidanov
116

En fait, la bonne réponse à cette question est d'ajouter simplement le schéma à votre document, comme ceci

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

...et tu as fini :)

Si le XSD n'est pas déjà mis en cache et indisponible, vous pouvez l'ajouter comme suit à partir de la console NuGet

Install-Package NuGet.Manifest.Schema -Version 2.0.0

Une fois que cela est fait, comme indiqué dans un commentaire ci-dessous, vous souhaiterez peut-être le déplacer de votre dossier actuel vers le dossier de schéma officiel qui se trouve dans

%VisualStudioPath%\Xml\Schemas
Stefan Z Camilleri
la source
Comment se fait-il que je ne puisse pas accéder à cette URL?
andrewb
4
Vous avez raison de dire que le xsd en question n'est pas accessible actuellement, cela dit, par leur définition W3C, aussi trompeuse soit-elle, la déclaration xmlns (namespace) n'est rien de plus qu'une chaîne sous la forme d'un URI, et il n'est pas nécessaire, ni suggéré, qu'une ressource y soit effectivement mise à disposition ( en.wikipedia.org/wiki/XML_namespace )
Stefan Z Camilleri
1
Oui, très certainement, c'est le xsd lui-même. Visual Studio ne valide pas vraiment le schéma, c'est la bibliothèque / l'assembly qui consomme le document XML qui fera la validation.La seule raison pour laquelle VS a besoin de ces informations est de fournir intellisense. Lorsque la ressource est introuvable, VS utilise peut-être une instance pré-mise en cache du xsd, qui se trouve dans% VsInstallDir% \ xml \ Schemas
Stefan Z Camilleri
4
Alors maintenant, je reçois 13 messages d'information ("Impossible de trouver les informations de schéma ...") au lieu d'un seul message d'avertissement ... un peu comme un pas en arrière :-)
Riegardt Steyn
1
Il est à noter que j'ai récemment eu des problèmes avec l'ajout de ces espaces de noms qui gâchent NuGet. C'est dommage car je préfère ne pas avoir les avertissements.
meh-uk
7

Aucune des réponses ne résoudra votre problème de manière permanente. Si vous allez sur le chemin de l'ajout de XSD (dans le menu Xml, sélectionnez "Créer un schéma"), vous finirez par avoir des problèmes avec le gestionnaire de packages car il nettoiera votre fichier packages.config lorsque vous ajouterez un nouveau package.

La meilleure solution est simplement d'ignorer en fermant le fichier lorsque vous ne l'utilisez pas.

Baris
la source
+1; sachez simplement que cela fonctionne également (et ne cassera pas le gestionnaire de paquets).
rsenna
5

Le problème est que vous avez besoin d'un schéma xsd pour packages.config.

Voici comment créer un schéma ( je l'ai trouvé ici) :

Ouvrez votre fichier de configuration -> XML -> Créer un schéma

entrez la description de l'image ici

Cela créerait un packages.xsdpour vous et l'ouvrirait dans Visual Studio:

entrez la description de l'image ici

Dans mon cas, a packages.xsdété créé sous ce chemin:

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

Maintenant, je ne veux pas référencer le à packages.xsdpartir d'un dossier Temp, mais je veux qu'il soit ajouté à ma solution et ajouté au contrôle de code source, afin que d'autres utilisateurs puissent l'obtenir ... alors je l'ai copié packages.xsdet collé dans mon dossier de solution. Ensuite, j'ai ajouté le fichier à ma solution:

1. Copiez packages.xsddans le même dossier que votre solution

2. À partir de VS, faites un clic droit sur solution -> Ajouter -> Élément existant ... puis ajoutezpackages.xsd

entrez la description de l'image ici

Nous l'avons donc créé packages.xsdet ajouté à la solution. Tout ce que nous avons à faire est d'indiquer au fichier de configuration d'utiliser ce schéma.

Ouvrez le fichier de configuration, puis dans le menu supérieur, sélectionnez:

XML -> Schémas ...

Ajoutez votre packages.xsdet sélectionnez Utiliser ce schéma (voir ci-dessous)

entrez la description de l'image ici

Hooman Bahreini
la source
4

Cela se produit car VS ne connaît pas le schéma de ce fichier. Notez que ce fichier est davantage un détail d'implémentation, et non quelque chose que vous devez normalement ouvrir directement. Au lieu de cela, vous pouvez utiliser la boîte de dialogue NuGet pour gérer les packages installés dans un projet.

David Ebbo
la source
Peu importe que vous utilisiez NuGet pour installer des packages. Le même fichier `packages.config 'est construit, et il génère toujours cet avertissement du compilateur.
ProfK
0

Cela fonctionne et reste même après l'ajout d'un nouveau package:

Ajoutez le! DOCTYPE suivant au-dessus de l'élément <packages>:

<?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
la source