nuget 'packages'要素は警告として宣言されていません


142

showtopperではありませんが、プロジェクトで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
tbh実際の解決策は公式スキーマを追加することです... pls以下の私の答えを参照してください
Stefan Z Camilleri

これがgithubの対応する問題です:github.com/NuGet/Home/issues/1836
dimaaan

回答:


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>

このファイルの場所(2つのオプション)

  • 「packages.config」ファイルと同じフォルダに、
  • packages.xsd複数のプロジェクト間で共有する場合は、それをVisual Studioスキーマフォルダーに移動します(パスは少し異なる場合があります D:\Program Files (x86)\Microsoft Visual Studio 10.0\Xml\Schemas

次に、ファイル内の<packages>タグを編集しpackages.configます(xmlns属性を追加):

<packages xmlns="urn:packages">

これで警告が表示されなくなります(packages.configファイルがVisual Studioで開いている場合でも)。


1
あなたはXSLの2行目変更する必要はありませんます:<xs:schema xmlns:XSを= " w3.org/2001/XMLSchema "のtargetNamespace ="壷:パッケージ"のxmlns = "壷:パッケージ">
ウリ

1
Visual Studioがそのxsdファイルを作成しない理由を知っていますか?
AndersLindén12年

1
Uは逃したtargetFrameworkXMLスキーマファイルに属性を。エラーが発生しましたtargetFramework attribute is not defined
shashwat

2
エンティティフレームワークでソリューションを使用すると、NuGetコンソールがpackage.configを正しく解析できず、プロジェクトにEnitityFrameworkパッケージがインストールされていないことを通知し続けました。私はVS2013究極のアップデート2にNuGet 2.8.50313.46とEF 6.1.0を使用しています
misterfrb

7
このソリューションは、vs2012 / nugetの不足しているパッケージ機能の自動インストールを中断します。警告はなくなりましたが、vs2012が不足しているパッケージをインストールしない理由を見つけるのに何時間もかかりました。したがって、より良い解決策(stackoverflow.com/questions/2833243/…の回答)は、メニューの[XML]-> [スキーマの作成]を使用してスキーマを作成することです(vs 2012では、使用されるスキーマのリストに自動的に追加されます)。を変更する必要はありません。構成、他の機能の中断なし
アウトオブマインド'26

188

ファイルが開いているときにのみ表示されます。Visual Studioでファイルを閉じると、警告が消えます

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


8
ハ、問題を無視するとそれが消えます:D。しかし、あなたが見ることができないものはあなたを傷つけることができますか?
JSideris

5
正しい@gregoryこれは無視する必要があります。この警告には他にも影響があります。それはによって生成されnugetnugetこのファイルの使い方をよく知っています。
shashwat 2012

ええ、これは受け入れられる答えになるはずです。上記は私が仕事でかつらを着用しなければならない理由の一つです。
neilhighley 2016

@neilhighleyみんなありがとう。問題を完全に覚えていないが、私がお手伝いできてうれしい。LOL
Tzvi Gregory Kaidanov

@RyanRodemoyerみんなありがとう。問題を完全に覚えていないが、私がお手伝いできてうれしい。LOL
Tzvi Gregory Kaidanov

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 2013

4
問題のxsdは現在アクセスできない、つまり、W3Cの定義では、誤解を招く可能性があるとして、xmlns(名前空間)宣言は、URIの形式の文字列にすぎないと言って間違いありません。リソースが実際に利用可能にすることを、必要に応じ、も示唆もされていませんが(en.wikipedia.org/wiki/XML_namespace
ステファン・Z Camilleri

1
はい、間違いなく、それはxsd自体です。Visual Studioは実際にはスキーマを検証しません。検証を行うのは、XMLドキュメントを消費するライブラリ/アセンブリです。VSがこの情報を必要とする唯一の理由は、インテリセンスを提供することです。リソースが見つからない場合、VSは事前にキャッシュされたxsdのインスタンスを使用している可能性があります。これは%VsInstallDir%\ xml \ Schemas
Stefan Z Camilleri

4
つまり、警告メッセージが1つだけではなく、13の情報メッセージ(「スキーマ情報が見つかりませんでした...」)が表示されます...少し後退したような気がします:-)
Riegardt Steyn

1
注目すべきは、最近、NuGetをめちゃくちゃにするこれらの名前空間の追加に問題がありました。警告を表示したくないので、残念です。
meh-uk 2015

7

答えのどれもあなたの問題を永久に解決しません。XSDを追加するパス([Xml]メニューから[スキーマの作成]を選択)に移動すると、新しいパッケージを追加するときにpackages.configファイルがクリーンアップされるため、パッケージマネージャーで問題が発生します。

最善の解決策は、使用しないときにファイルを閉じることで無視することです。


+1; これも機能することに注意してください(パッケージマネージャーが壊れることはありません)。
rsenna 2017年

5

問題は、のxsdスキーマが必要なことです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[ このスキーマを使用]を選択します(以下を参照)

ここに画像の説明を入力してください


4

これは、VSがこのファイルのスキーマを認識していないために発生します。このファイルは実装の詳細であり、通常は直接開く必要があるものではないことに注意してください。代わりに、NuGetダイアログを使用して、プロジェクトにインストールされているパッケージを管理できます。


NuGetを使用してパッケージをインストールすることは問題ではありません。同じ `packages.config 'ファイルがビルドされ、それでもコンパイラ警告が生成されます。
ProfK 2016年

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>
]>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.