nuget'packages'元素未声明警告

rou*_*sis 139 xml visual-studio nuget

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

<?xml version="1.0" encoding="utf-8"?>
<packages>
   ... your packages
</packages> 
Run Code Online (Sandbox Code Playgroud)

这会在VS中发出警告

The 'packages' element is not declared.
Run Code Online (Sandbox Code Playgroud)

问题的起源与我猜的xml声明有关.

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

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

Tzv*_*nov 185

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

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

  • 哈,忽视这个问题让它消失了:D.但你看不到的东西会伤到你吗? (8认同)
  • 对@gregory我们应该忽略这个..这个警告还有其他影响.它由`nuget`生成,`nuget`知道如何使用这个文件. (5认同)
  • 这应该是公认的答案.很傻. (4认同)

Ste*_*eri 115

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

<packages xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
Run Code Online (Sandbox Code Playgroud)

......你做完了:)

如果XSD尚未缓存且不可用,您可以从NuGet控制台按如下方式添加它

Install-Package NuGet.Manifest.Schema -Version 2.0.0
Run Code Online (Sandbox Code Playgroud)

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

%VisualStudioPath%\Xml\Schemas
Run Code Online (Sandbox Code Playgroud)

  • 你说正确的xsd目前无法访问是正确的,因为它们的W3C定义可能会误导,xmlns(名称空间)声明只不过是一个URI形式的字符串,并且不要求也不建议在那里实际提供资源(http://en.wikipedia.org/wiki/XML_namespace) (4认同)
  • 所以现在我收到13条信息消息("找不到架构信息......")而不只是一条警告信息......那种感觉就像退后一步:-) (4认同)
  • 值得注意的是,我最近在添加那些搞砸 NuGet 的命名空间时遇到了问题。不幸的是,因为我不想收到警告。 (3认同)

Łuk*_*rak 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>
Run Code Online (Sandbox Code Playgroud)

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

  • 在与"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">
Run Code Online (Sandbox Code Playgroud)

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

  • 此解决方案打破了vs2012/nuget中缺少包功能的自动安装.警告消失了,但是我花了几个小时才发现,为什么vs2012不再安装丢失的包.因此,更好的解决方案(在http://stackoverflow.com/questions/2833243/web-config-configsource-and-the-xxx-element-is-not-declared-warning中回答)是通过菜单XML创建架构 - >创建架构(vs 2012将自动将其添加到使用的架构列表中) - 无需更改.config,不会中断其他功能 (7认同)
  • 我发现使用你的解决方案与实体框架,NuGet控制台无法正确解析我的package.config并一直告诉我,我的项目中没有安装EnitityFramework包.我在VS2013终极更新2上使用EF 6.1.0和NuGet 2.8.50313.46. (2认同)

Bar*_*ris 7

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

最好的解决方案是在不使用文件时关闭文件而忽略.


Hoo*_*ini 5

问题是,您需要一个用于packages.config.

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

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

在此处输入图片说明

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

在此处输入图片说明

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

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

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

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

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

在此处输入图片说明

所以,现在我们已经创建packages.xsd并将其添加到解决方案中。我们需要做的就是告诉配置文件使用这个模式。

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

XML -> 架构...

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

在此处输入图片说明