O elemento nuget 'packages' não é declarado como aviso


142

não um showstopper, mas ao usar o nuget em um projeto, ele cria um arquivo packages.config com esta forma

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

isso dá um aviso no VS

The 'packages' element is not declared.

A origem do problema tem algo a ver com a declaração xml, eu acho.

Também acho que o pacote de definição padrão não deve lançar avisos.

Alguém sabe o que devo mudar para não receber esse aviso? (ou seja, mesmo que eu possa vê-lo apenas quando o arquivo estiver aberto, ele também será exibido como um aviso constantemente com certas regras de CA ativadas.)


3
Eu encontrei [esta solução] [1] para este tópico, o que acho melhor. [1]: stackoverflow.com/questions/2833243/…
Mario Lopez

1
tbh a verdadeira solução é adicionar o esquema oficial ... pls ver minha resposta abaixo
Stefan Z Camilleri

Aqui está o problema correspondente no github: github.com/NuGet/Home/issues/1836 #
dimaaan

Respostas:


96

Você sempre pode criar um esquema xsd simples para 'packages.config' para se livrar deste aviso. Para fazer isso, crie um arquivo chamado "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>

Localização deste arquivo (duas opções)

  • Na mesma pasta que o arquivo 'packages.config',
  • Se você deseja compartilhar packages.xsdvários projetos, mova-o para a pasta Esquemas do Visual Studio (o caminho pode ser um pouco diferente, é D:\Program Files (x86)\Microsoft Visual Studio 10.0\Xml\Schemaspara mim).

Em seguida, edite a <packages>tag no packages.configarquivo (adicionar xmlnsatributo):

<packages xmlns="urn:packages">

Agora o aviso deve desaparecer (mesmo se o arquivo packages.config estiver aberto no Visual Studio).


1
Você não precisa modificar a segunda linha do XSL: <xs: schema xmlns: xs = " w3.org/2001/XMLSchema " targetNamespace = "urn: packages" xmlns = "urn: packages">
Uri

1
Você sabe por que o Visual Studio não está criando esse arquivo xsd?
Anders Lindén

1
u perdeu targetFrameworkatributo no arquivo de esquema xml. Estou recebendo errotargetFramework attribute is not defined
shashwat 22/09/12

2
Descobri que, usando sua solução com estrutura de entidade, o console do NuGet não pôde analisar meu package.config corretamente e continuava me dizendo que o pacote EnitityFramework não estava instalado no meu projeto. Estou usando EF 6.1.0 com NuGet 2.8.50313.46 em VS2013 atualização final 2.
misterfrb

7
Esta solução interrompe o recurso de instalação automática de pacotes ausentes no vs2012 / nuget. O aviso sumiu, mas me custou horas para descobrir por que o vs2012 não instala mais pacotes ausentes. Portanto, a melhor solução (responda em stackoverflow.com/questions/2833243/… ) é criar um esquema via menu XML -> Criar esquema (o vs 2012 o adicionará automaticamente à lista de esquemas usados) - não é necessário alterar o. config, nenhuma quebra de outros recursos
outofmind

188

Você o verá somente quando o arquivo estiver aberto. Quando você fecha o arquivo no Visual Studio, os avisos desaparecem

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


8
Ha, ignorar o problema faz com que ele desapareça: D. Mas o que você não pode ver pode machucá-lo?
JSideris

5
right @gregory, devemos ignorar isso .. há outro impacto desse aviso. É gerado nugete nugetsabe como usar esse arquivo muito bem.
Shashwat 22/09/12

Sim, esta deve ser a resposta aceita. O acima é uma das razões pelas quais eu tenho que usar uma peruca no trabalho.
precisa saber é o seguinte

@neilhighley Obrigado pessoal. Não me lembro bem do problema, mas feliz por poder ajudar. LOL
Tzvi Gregory Kaidanov

@RyanRodemoyer Thanks guys. Não me lembro bem do problema, mas feliz por poder ajudar. LOL
Tzvi Gregory Kaidanov

116

Na verdade, a resposta correta para isso é apenas adicionar o esquema ao seu documento, assim

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

... e pronto :)

Se o XSD ainda não estiver armazenado em cache e indisponível, você poderá adicioná-lo da seguinte maneira no console do NuGet

Install-Package NuGet.Manifest.Schema -Version 2.0.0

Feito isso, conforme observado em um comentário abaixo, convém movê-lo da pasta atual para a pasta de esquema oficial encontrada em

%VisualStudioPath%\Xml\Schemas

Como é que eu não consigo acessar esse URL?
andrewb

4
Você está correto ao dizer que o xsd em questão não está acessível no momento, ou seja, por sua definição do W3C, por mais enganosa que seja, a declaração xmlns (namespace) nada mais é do que uma cadeia de caracteres na forma de um URI e não é necessário, nem sugerido, que um recurso seja realmente disponibilizado lá ( pt.wikipedia.org/wiki/XML_namespace )
Stefan Z Camilleri

1
Sim, definitivamente, é o próprio xsd. O Visual Studio realmente não valida o esquema, é a biblioteca / assembly que está consumindo o documento XML que fará a validação. O único motivo pelo qual o VS precisa dessas informações é fornecer intellisense. Quando o recurso não pode ser encontrado, o VS pode estar usando uma instância pré-armazenada em cache do xsd, que pode ser encontrada em% VsInstallDir% \ xml \ Schemas
Stefan Z Camilleri

4
Então agora eu estou ficando 13 Mensagens de informação ( "Não foi possível encontrar informações de esquema ...") em vez de apenas uma mensagem de aviso ... tipo-de sente como um passo para trás :-)
Riegardt Steyn

1
É importante notar que recentemente tive problemas com a adição desses espaços para nome, estragando o NuGet. É uma pena que eu prefiro não receber os avisos.
meh-uk

7

Nenhuma das respostas resolverá seu problema permanentemente. Se você seguir o caminho de adicionar XSD (no menu Xml, selecione "Criar esquema"), você terá problemas com o gerenciador de pacotes, pois ele limpará o arquivo packages.config ao adicionar um novo pacote.

A melhor solução é simplesmente ignorar fechando o arquivo quando você não o usa.


+1; esteja ciente de que isso também funciona (e não interromperá o gerenciador de pacotes).
Rnsna 31/05/19

5

O problema é que você precisa de um esquema xsd packages.config.

É assim que você pode criar um esquema ( eu o encontrei aqui) :

Abra o arquivo Config -> XML -> Criar Esquema

insira a descrição da imagem aqui

Isso criaria um packages.xsdpara você e o abriria no Visual Studio:

insira a descrição da imagem aqui

No meu caso, packages.xsdfoi criado sob este caminho:

C: \ Usuários \ MeuUsuário \ AppData \ Local \ Temp

Agora não quero fazer referência a packages.xsduma pasta Temp, mas quero que ela seja adicionada à minha solução e adicionada ao controle de origem, para que outros usuários possam obtê-la ... então copieipackages.xsd e colei na pasta da solução. Em seguida, adicionei o arquivo à minha solução:

1. Copie packages.xsdna mesma pasta que sua solução

2. No VS, clique com o botão direito do mouse na solução -> Adicionar -> Item Existente ... e adicionepackages.xsd

insira a descrição da imagem aqui

Então, agora nós criamos packages.xsd e adicionamos à solução. Tudo o que precisamos fazer é dizer ao arquivo de configuração para usar este esquema.

Abra o arquivo de configuração e, no menu superior, selecione:

XML -> Esquemas ...

Adicione o seu packages.xsde selecione Usar este esquema (veja abaixo)

insira a descrição da imagem aqui


4

Isso acontece porque o VS não conhece o esquema desse arquivo. Observe que esse arquivo é mais um detalhe de implementação, e não é algo que você normalmente precisa abrir diretamente. Em vez disso, você pode usar a caixa de diálogo NuGet para gerenciar os pacotes instalados em um projeto.


Não importa que você use o NuGet para instalar pacotes. O mesmo arquivo `packages.config 'é criado e ainda gera esse aviso do compilador.
ProfK

0

Isso funciona e permanece mesmo após a adição de um novo pacote:

Adicione o seguinte! DOCTYPE acima do 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>
]>
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.