El elemento nuget 'paquetes' no se declara advertencia

142

no es un showtopper, pero cuando usa nuget en un proyecto, crea un archivo packages.config con esta forma

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

esto da una advertencia en VS

The 'packages' element is not declared.

El origen del problema tiene algo que ver con la declaración xml, supongo.

También creo que el paquete de definición predeterminado no debería arrojar advertencias.

¿Alguien sabe a qué debería cambiarlo para que no reciba esta advertencia? (es decir, incluso si puedo verlo solo cuando el archivo está abierto, también se muestra como una advertencia constantemente con ciertas reglas de CA activadas).

crisis redonda
fuente
3
Encontré [esta solución] [1] para este tema, que creo que es mejor. [1]: stackoverflow.com/questions/2833243/…
Mario Lopez
1
tbh la verdadera solución es agregar el esquema oficial ... por favor vea mi respuesta a continuación
Stefan Z Camilleri
Aquí está el problema correspondiente en github: github.com/NuGet/Home/issues/1836
dimaaan

Respuestas:

96

Siempre puede hacer un esquema xsd simple para 'packages.config' para deshacerse de esta advertencia. Para hacer esto, cree un archivo llamado "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>

Ubicación de este archivo (dos opciones)

  • En la misma carpeta que el archivo 'packages.config',
  • Si desea compartir packages.xsdentre varios proyectos, muévalo a la carpeta Esquemas de Visual Studio (la ruta puede diferir ligeramente, es D:\Program Files (x86)\Microsoft Visual Studio 10.0\Xml\Schemaspara mí).

Luego, edite la <packages>etiqueta en el packages.configarchivo (agregar xmlnsatributo):

<packages xmlns="urn:packages">

Ahora la advertencia debería desaparecer (incluso si el archivo packages.config está abierto en Visual Studio).

Łukasz Wiatrak
fuente
1
No tiene que modificar la segunda línea del XSL: <xs: esquema xmlns: xs = " w3.org/2001/XMLSchema " targetNamespace = "urn: packages" xmlns = "urn: packages">
Uri
1
¿Sabes por qué Visual Studio no está creando ese archivo xsd?
Anders Lindén
1
u omitió el targetFrameworkatributo en el archivo de esquema xml. Recibo un errortargetFramework attribute is not defined
shashwat
2
Descubrí que al usar su solución con el marco de entidad, la consola NuGet no podía analizar mi paquete.config correctamente y seguía diciéndome que el paquete EnitityFramework no estaba instalado en mi proyecto. Estoy usando EF 6.1.0 con NuGet 2.8.50313.46 en VS2013 ultimate update 2.
misterfrb
77
Esta solución interrumpe la instalación automática de los paquetes faltantes en vs2012 / nuget. La advertencia desapareció, pero me costó horas descubrir por qué vs2012 ya no instala los paquetes faltantes. Por lo tanto, la mejor solución (respuesta en stackoverflow.com/questions/2833243/… ) es crear un esquema a través del menú XML -> Crear esquema (vs 2012 lo agregará automáticamente a la lista de esquemas utilizados), sin necesidad de cambiarlo. config, sin interrupción de otras características
outofmind
188

Lo verá solo cuando el archivo esté abierto. Cuando cierre el archivo en Visual Studio, las advertencias desaparecerán

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

Tzvi Gregory Kaidanov
fuente
8
Ha, ignorar el problema hace que desaparezca: D. Pero, ¿puede lastimarte lo que no puedes ver?
JSideris
55
right @gregory deberíamos ignorar esto ... hay otro impacto de esta advertencia. Es generado por nugety nugetsabe cómo usar este archivo muy bien.
shashwat
Sí, esta debería ser la respuesta aceptada. La anterior es una de las razones por las que tengo que usar una peluca en el trabajo.
neilhighley
@neilhighley Gracias chicos. No recuerdo muy bien el problema, pero me alegra haber podido ayudar. LOL
Tzvi Gregory Kaidanov
@RyanRodemoyer Gracias chicos. No recuerdo muy bien el problema, pero me alegra haber podido ayudar. LOL
Tzvi Gregory Kaidanov
116

En realidad, la respuesta correcta a esto es simplemente agregar el esquema a su documento, así

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

...y tu estas listo :)

Si el XSD aún no está en caché y no está disponible, puede agregarlo de la siguiente manera desde la consola NuGet

Install-Package NuGet.Manifest.Schema -Version 2.0.0

Una vez hecho esto, como se señala en un comentario a continuación, es posible que desee moverlo de su carpeta actual a la carpeta de esquema oficial que se encuentra en

%VisualStudioPath%\Xml\Schemas
Stefan Z Camilleri
fuente
¿Cómo es que no puedo ir a esa URL?
andrewb
44
Tiene razón al decir que el xsd en cuestión no es accesible actualmente, dicho eso, por su definición del W3C, por engañoso que pueda ser, la declaración xmlns (espacio de nombres) no es más que una cadena en forma de URI, y no se requiere, ni se sugiere, que un recurso esté realmente disponible allí ( en.wikipedia.org/wiki/XML_namespace )
Stefan Z Camilleri
1
Sí, definitivamente, es el propio xsd. Visual Studio realmente no valida el esquema, es la biblioteca / ensamblaje que está consumiendo el documento XML que hará la validación. La única razón por la que VS necesita esta información es para proporcionar inteligencia. Cuando no se puede encontrar el recurso, VS podría estar usando una instancia pre-almacenada en caché del xsd, que se puede encontrar en% VsInstallDir% \ xml \ Schemas
Stefan Z Camilleri
44
Así que ahora recibo 13 mensajes de información ("No se pudo encontrar la información del esquema ...") en lugar de solo un mensaje de advertencia ... algo así como un paso atrás :-)
Riegardt Steyn
1
Cabe destacar que recientemente tuve problemas para agregar esos espacios de nombres que arruinan NuGet. Es lamentable ya que prefiero no tener las advertencias.
meh-uk
7

Ninguna de las respuestas resolverá su problema de forma permanente. Si va a la ruta de agregar XSD (desde el menú Xml, seleccione "Crear esquema"), terminará teniendo problemas con el administrador de paquetes, ya que limpiará su archivo packages.config cuando agregue un nuevo paquete.

La mejor solución es ignorarlo cerrando el archivo cuando no lo use.

Baris
fuente
+1; solo tenga en cuenta que esto también funciona (y no romperá el administrador de paquetes).
rsenna
5

El problema es que necesita un esquema xsd para packages.config.

Así es como puedes crear un esquema ( lo encontré aquí) :

Abra su archivo de configuración -> XML -> Crear esquema

ingrese la descripción de la imagen aquí

Esto crearía un packages.xsdpara usted y lo abrirá en Visual Studio:

ingrese la descripción de la imagen aquí

En mi caso, packages.xsdfue creado bajo esta ruta:

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

Ahora no quiero hacer referencia al packages.xsdarchivo desde una carpeta Temp, pero quiero que se agregue a mi solución y se agregue al control de origen, para que otros usuarios puedan obtenerlo ... así que copiépackages.xsd y pegué en mi carpeta de soluciones. Luego agregué el archivo a mi solución:

1. Copie packages.xsden la misma carpeta que su solución

2. Desde VS, haga clic derecho en la solución -> Agregar -> Elemento existente ... y luego agreguepackages.xsd

ingrese la descripción de la imagen aquí

Entonces, ahora hemos creado packages.xsd y agregado a la Solución. Todo lo que tenemos que hacer es decirle al archivo de configuración que use este esquema.

Abra el archivo de configuración, luego desde el menú superior seleccione:

XML -> Esquemas ...

Agregue su packages.xsdy seleccione Usar este esquema (ver más abajo)

ingrese la descripción de la imagen aquí

Hooman Bahreini
fuente
4

Esto sucede porque VS no conoce el esquema de este archivo. Tenga en cuenta que este archivo es más un detalle de implementación, y no es algo que normalmente necesita abrir directamente. En su lugar, puede usar el cuadro de diálogo NuGet para administrar los paquetes instalados en un proyecto.

David Ebbo
fuente
No importa que use NuGet para instalar paquetes. Se crea el mismo archivo `packages.config ', y aún genera esa advertencia de compilación.
ProfK
0

Esto funciona y permanece incluso después de agregar un nuevo paquete:

Agregue lo siguiente! DOCTYPE sobre el 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>
]>
chuckc
fuente