L'elemento 'pacchetti' di nuget non è dichiarato avviso


142

non uno showstopper ma quando si utilizza nuget in un progetto, crea un file packages.config con questa forma

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

questo dà un avvertimento in VS

The 'packages' element is not declared.

L'origine del problema ha qualcosa a che fare con la dichiarazione XML suppongo.

Inoltre, penso che il pacchetto di definizione predefinito non debba generare avvisi.

Qualcuno sa in cosa dovrei cambiarlo per non ricevere questo avviso? (vale a dire anche se riesco a vederlo solo quando il file è aperto, viene anche visualizzato come un avviso costantemente con determinate regole della CA attivate.)


3
Ho trovato [questa soluzione] [1] per questo argomento, che penso sia migliore. [1]: stackoverflow.com/questions/2833243/…
Mario Lopez,

1
la vera soluzione è aggiungere lo schema ufficiale ... per favore vedi la mia risposta qui sotto
Stefan Z Camilleri,

Ecco il numero corrispondente su github: github.com/NuGet/Home/issues/1836
dimaaan,

Risposte:


96

Puoi sempre creare un semplice schema xsd per "pacchetti.config" per eliminare questo avviso. Per fare ciò, creare il file denominato "pacchetti.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>

Posizione di questo file (due opzioni)

  • Nella stessa cartella del file 'packages.config',
  • Se desideri condividere packages.xsdpiù progetti, spostalo nella cartella Schemi di Visual Studio (il percorso potrebbe essere leggermente diverso, è D:\Program Files (x86)\Microsoft Visual Studio 10.0\Xml\Schemasper me).

Quindi, modifica il <packages>tag nel packages.configfile (aggiungi xmlnsattributo):

<packages xmlns="urn:packages">

Ora l'avviso dovrebbe scomparire (anche se il file package.config è aperto in Visual Studio).


1
Non è necessario modificare la seconda riga dell'XSL: <xs: schema xmlns: xs = " w3.org/2001/XMLSchema " targetNamespace = "urna: pacchetti" xmlns = "urna: pacchetti">
Uri

1
Sai perché Visual Studio non sta creando quel file xsd?
Anders Lindén,

1
hai perso l' targetFrameworkattributo nel file di schema xml. Ricevo un erroretargetFramework attribute is not defined
shashwat,

2
Ho scoperto che usando la tua soluzione con framework di entità, la console NuGet non è stata in grado di analizzare correttamente il mio package.config e continuavo a dirmi che il pacchetto EnitityFramework non era installato nel mio progetto. Sto usando EF 6.1.0 con NuGet 2.8.50313.46 su VS2013 ultimo aggiornamento 2.
misterfrb

7
Questa soluzione interrompe l'installazione automatica della funzione di pacchetti mancanti in vs2012 / nuget. L'avvertimento era sparito, ma mi è costato ore per scoprirlo, perché vs2012 non installa più pacchetti mancanti. Quindi la soluzione migliore (risposta in stackoverflow.com/questions/2833243/… ) è quella di creare uno schema tramite il menu XML -> Crea schema (vs 2012 lo aggiungerà automaticamente all'elenco degli schemi utilizzati) - non è necessario modificare il. config, nessuna interruzione di altre funzionalità
outofmind

188

Lo vedrai solo quando il file è aperto. Quando chiuderai il file in Visual Studio, gli avvisi scompaiono

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


8
Ah, ignorare il problema lo fa andare via: D. Ma ciò che non vedi può farti del male?
JSideris,

5
giusto @gregory dovremmo ignorarlo .. c'è un altro impatto di questo avvertimento. È generato da nugete nugetsa usare molto bene questo file.
Shashwat,

Sì, questa dovrebbe essere la risposta accettata. Quello sopra è uno dei motivi per cui devo indossare una parrucca al lavoro.
Neilhighley,

@neilhighley Grazie ragazzi. Non ricordo bene il problema, ma sono felice di poterti aiutare. LOL
Tzvi Gregory Kaidanov

@RyanRodemoyer Grazie ragazzi. Non ricordo bene il problema, ma sono felice di poterti aiutare. LOL
Tzvi Gregory Kaidanov,

116

In realtà la risposta corretta a questo è semplicemente aggiungere lo schema al documento, in questo modo

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

...e hai finito :)

Se l'XSD non è già memorizzato nella cache e non disponibile, è possibile aggiungerlo come segue dalla console NuGet

Install-Package NuGet.Manifest.Schema -Version 2.0.0

Una volta fatto, come indicato in un commento qui sotto, potresti voler spostarlo dalla cartella corrente alla cartella schema ufficiale che si trova in

%VisualStudioPath%\Xml\Schemas

Come mai non posso andare a quell'URL?
Andrewb

4
Hai ragione nel dire che l'xsd in questione non è attualmente accessibile, che ha detto, con la loro definizione di W3C, per quanto fuorviante, la dichiarazione xmlns (namespace) non è altro che una stringa sotto forma di URI, e non è richiesto, né suggerito, che una risorsa sia effettivamente resa disponibile lì ( en.wikipedia.org/wiki/XML_namespace )
Stefan Z Camilleri,

1
Sì, sicuramente, è la stessa xsd. Visual Studio non convalida realmente lo schema, è la libreria / assembly che sta consumando il documento XML che eseguirà la convalida. L'unica ragione per cui VS ha bisogno di queste informazioni è fornire intellisense. Quando la risorsa non può essere trovata, VS potrebbe utilizzare un'istanza pre-cache di xsd, che può essere trovata in% VsInstallDir% \ xml \ Schemas
Stefan Z Camilleri,

4
Quindi ora sto ricevendo 13 messaggi informativi ("Impossibile trovare le informazioni
sullo

1
Da notare che recentemente ho avuto problemi con l'aggiunta di quegli spazi dei nomi che hanno rovinato NuGet. È un peccato perché preferisco non avere gli avvisi.
Meh-uk,

7

Nessuna delle risposte risolverà il problema in modo permanente. Se vai al percorso di aggiunta di XSD (dal menu Xml, seleziona "Crea schema"), finirai per avere problemi con il gestore dei pacchetti in quanto ripulirà il tuo file packages.config quando aggiungi un nuovo pacchetto.

La soluzione migliore è semplicemente ignorare chiudendo il file quando non lo si utilizza.


+1; tieni presente che anche questo funziona (e non interromperà il gestore pacchetti).
rsenna,

5

Il problema è che è necessario uno schema xsd per packages.config.

Ecco come è possibile creare uno schema (l' ho trovato qui) :

Apri il tuo file di configurazione -> XML -> Crea schema

inserisci qui la descrizione dell'immagine

Questo creerebbe un packages.xsdper te e lo aprirà in Visual Studio:

inserisci qui la descrizione dell'immagine

Nel mio caso, è packages.xsdstato creato con questo percorso:

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

Ora non voglio fare riferimento a packages.xsdda una cartella Temp, ma voglio che sia aggiunto alla mia soluzione e aggiunto al controllo del codice sorgente, in modo che altri utenti possano ottenerlo ... così l'ho copiato packages.xsde incollato nella mia cartella della soluzione. Quindi ho aggiunto il file alla mia soluzione:

1. Copia packages.xsdnella stessa cartella della soluzione

2. Da VS, fare clic con il tasto destro del mouse sulla soluzione -> Aggiungi -> Articolo esistente ... e quindi aggiungerepackages.xsd

inserisci qui la descrizione dell'immagine

Quindi, ora lo abbiamo creato packages.xsde aggiunto alla soluzione. Tutto quello che dobbiamo fare è dire al file di configurazione di utilizzare questo schema.

Apri il file di configurazione, quindi dal menu in alto seleziona:

XML -> Schemi ...

Aggiungi il tuo packages.xsde seleziona Usa questo schema (vedi sotto)

inserisci qui la descrizione dell'immagine


4

Questo accade perché VS non conosce lo schema di questo file. Si noti che questo file è più un dettaglio dell'implementazione e non qualcosa che normalmente è necessario aprire direttamente. Invece, puoi usare la finestra di dialogo NuGet per gestire i pacchetti installati in un progetto.


Non importa che usi NuGet per installare i pacchetti. Lo stesso file "pacchetti.config" è stato creato e genera comunque l'avvertimento del compilatore.
ProfK,

0

Funziona e rimane anche dopo aver aggiunto un nuovo pacchetto:

Aggiungi quanto segue! DOCTYPE sopra l'elemento <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>
]>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.