nuget'packages'元素未声明为警告


142

不是showstopper,而是在项目中使用nuget时,它将创建具有以下形状的packages.config文件

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

这在VS中给出了警告

The 'packages' element is not declared.

我想问题的根源与xml声明有关。

我也认为默认定义包不应该发出警告。

有人知道我应该将其更改为什么,以便我不会收到此警告吗?(即,即使我仅在打开文件时才能看到它,在某些CA规则启用的情况下,它也始终显示为警告。)


3
我为此主题找到了[解决方案] [1],我认为这更好。[1]:stackoverflow.com/questions/2833243/…–
马里奥·洛佩兹

1
真正的解决方案是添加官方架构...请在下面看到我的答案
Stefan Z Camilleri 2013年

这是github上的相应问题:github.com/NuGet/Home/issues/1836
dimaaan

Answers:


96

您始终可以为“ packages.config”创建简单的xsd模式,以消除此警告。为此,创建名为“ 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>

该文件的位置(两个选项)

  • 在与“ packages.config”文件相同的文件夹中,
  • 如果要packages.xsd在多个项目之间共享,请将其移动到Visual Studio Schemas文件夹(路径可能会稍有不同,这是 D:\Program Files (x86)\Microsoft Visual Studio 10.0\Xml\Schemas给我的)。

然后,<packages>packages.config文件中编辑标签(添加xmlns属性):

<packages xmlns="urn:packages">

现在警告应该消失了(即使在Visual Studio中打开了packages.config文件)。


1
您不必修改XSL的第二行:<xs:schema xmlns:xs =“ w3.org/2001/XMLSchema ” targetNamespace =“ urn:packages” xmlns =“ urn:packages”>
Uri

1
您知道为什么Visual Studio不创建该xsd文件吗?
安德斯·林登(AndersLindén)2012年

1
targetFramework在xml模式文件中缺少属性。我遇到错误targetFramework attribute is not defined
shashwat 2012年

2
我发现将解决方案与实体框架一起使用时,NuGet控制台无法正确解析我的package.config,并不断告诉我项目中未安装EnitityFramework软件包。我在VS2013 Ultimate Update 2上使用带有NuGet 2.8.50313.46的EF 6.1.0,
2014年

7
该解决方案打破了vs2012 / nuget中缺少软件包自动安装的功能。警告不见了,但花了我几个小时才能找出来,为什么vs2012不再安装缺少的软件包。因此,更好的解决方案(在stackoverflow.com/questions/2833243/…中答复)是通过菜单XML->创建模式(vs 2012将自动将其添加到使用的模式列表中)创建模式-无需更改。配置,其他功能无中断
超出了2015年

188

仅当文件打开时,您才会看到它。当您在Visual Studio中关闭文件时,警告消失

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


8
哈,忽略了这个问题,它就消失了:D。但是,您看不到的东西会伤害您吗?
JSideris

5
正确@gregory,我们应该忽略这一点。.此警告还有其他影响。它由生成,nuget并且nuget知道如何很好地使用此文件。
shashwat 2012年

是的,这应该是公认的答案。以上是我不得不在工作中戴假发的原因之一。
neilhighley

@neilhighley谢谢大家。不太记得这个问题,但很高兴我能帮助你。LOL
Tzvi格雷戈里·凯达诺威

@RyanRodemoyer谢谢大家。不太记得这个问题,但很高兴我能帮助你。LOL
Tzvi格雷戈里·凯达诺威

116

实际上,正确的答案是将架构添加到您的文档中,如下所示

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

...您就完成了:)

如果XSD尚未缓存且不可用,则可以从NuGet控制台中如下添加它

Install-Package NuGet.Manifest.Schema -Version 2.0.0

完成此操作后,如下面的注释中所述,您可能希望将其从当前文件夹移动到位于以下位置的官方架构文件夹中

%VisualStudioPath%\Xml\Schemas

为什么我不能转到该URL?
andrewb

4
您说的是,当前无法访问所讨论的xsd是正确的,也就是说,根据其W3C定义,xmlns(名称空间)声明仅是URI形式的字符串,这可能会引起误解,并且它不是必需的,也没有提出,即资源实际可用那里(en.wikipedia.org/wiki/XML_namespace
斯特凡ž金瑞利

1
是的,绝对可以,这就是xsd本身。Visual Studio并没有真正验证架构,而是使用正在使用XML文档的库/程序集进行验证。VS需要此信息的唯一原因是提供智能感知。当找不到资源时,VS可能正在使用xsd的预缓存实例,该实例可以在%VsInstallDir%\ xml \ Schemas中找到
Stefan Z Camilleri

4
因此,现在我收到13条信息消息(“找不到架构信息...”),而不是一条警告消息...有点像后退了:-)
Riegardt Steyn

1
值得注意的是,最近在添加这些命名空间时,NuGet出现了问题。不幸的是,我不想收到警告。
meh-uk 2015年

7

这些答案都无法永久解决您的问题。如果转到添加XSD的路径(从Xml菜单中选择“创建模式”),则最终会遇到软件包管理器的问题,因为它会在添加新软件包时清理您的packages.config文件。

最好的解决方案是在不使用文件时通过关闭文件来忽略它。


+1; 请注意,也可行(并且不会破坏程序包管理器)。
rsenna

5

问题是,您需要一个xsd模式packages.config

这是创建模式的方法(我在这里找到了它)

打开配置文件-> XML->创建模式

在此处输入图片说明

这将为packages.xsd您创建一个,并在Visual Studio中将其打开:

在此处输入图片说明

就我而言,packages.xsd是在以下路径下创建的:

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

现在,我不想packages.xsd从Temp文件夹中引用,而是希望将其添加到我的解决方案中并添加到源代码管理中,以便其他用户可以获取它...所以我复制了packages.xsd其并粘贴到我的解决方案文件夹中。然后,将文件添加到解决方案中:

1.复制packages.xsd到与您的解决方案相同的文件夹中

2.从VS中,右键单击解决方案->添加->现有项...,然后添加packages.xsd

在此处输入图片说明

因此,现在我们已经创建packages.xsd并将其添加到解决方案中。我们需要做的就是告诉配置文件使用此架构。

打开配置文件,然后从顶部菜单中选择:

XML->模式...

添加您的packages.xsd,然后选择使用此架构(请参见下文)

在此处输入图片说明


4

发生这种情况是因为VS不知道此文件的架构。请注意,此文件更多地是实现细节,而不是通常通常需要直接打开的文件。相反,您可以使用NuGet对话框来管理项目中安装的软件包。


使用NuGet安装软件包都没关系。生成了相同的“ packages.config”文件,它仍然生成该编译器警告。
ProfK

0

即使添加了新软件包,该方法仍然有效:

在<packages>元素上方添加以下!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>
]>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.