nuget'packages'元素未声明警告

时间:2011-07-21 10:23:40

标签: xml visual-studio nuget

不是showstopper,但在项目中使用nuget时,会创建一个具有此形状的packages.config文件

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

这会在VS中发出警告

The 'packages' element is not declared.

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

另外我认为默认定义包不应该抛出警告。

有谁知道我该怎么改变它所以我没有得到这个警告? (即使我只有在文件打开时才能看到它,它也会随着某些CA规则不断显示警告。)

8 个答案:

答案 0 :(得分:180)

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

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

答案 1 :(得分:111)

实际上,对此的正确答案是将架构添加到文档中,如此

<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

答案 2 :(得分:93)

您总是可以为'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文件)。

答案 3 :(得分:6)

所有答案都不会永久解决您的问题。如果你去添加XSD的路径(从Xml菜单,选择“创建模式”),你将最终遇到包管理器的问题,因为它会在你添加新包时清理你的packages.config文件。

只有在不使用文件时关闭文件才能忽略最佳解决方案。

答案 4 :(得分:4)

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

答案 5 :(得分:0)

问题是,您需要packages.config的xsd架构。

这是创建模式的方法(I found it here)

打开您的配置文件-> XML->创建架构

enter image description here

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

enter image description here

对于我来说,packages.xsd是在以下路径下创建的:

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

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

1。将packages.xsd复制到解决方案所在的文件夹中

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

enter image description here

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

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

XML->模式...

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

enter image description here

答案 6 :(得分:0)

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

元素上方添加以下!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>
]>

答案 7 :(得分:0)

有时会在您拥有旧项目版本时发生。要解决它,请执行以下步骤:

  1. 右键单击 References 并选择 packages.config toPackageReference..
  2. 点击确定
  3. 等待项目包更新