Elemen 'paket' nuget tidak dinyatakan sebagai peringatan

142

bukan showstopper tetapi ketika menggunakan nuget dalam suatu proyek, ia membuat file paket.config dengan bentuk ini

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

ini memberikan peringatan dalam VS

The 'packages' element is not declared.

Asal usul masalah ada hubungannya dengan deklarasi xml kurasa.

Saya juga berpikir bahwa paket definisi standar tidak boleh membuang peringatan.

Adakah yang tahu saya harus mengubahnya jadi saya tidak mendapatkan peringatan ini? (Yaitu bahkan jika saya bisa melihatnya hanya ketika file terbuka, itu juga ditampilkan sebagai peringatan terus-menerus dengan aturan CA tertentu aktif.)

krisis bundar
sumber
3
Saya menemukan [solusi ini] [1] untuk topik ini, yang menurut saya lebih baik. [1]: stackoverflow.com/questions/2833243/…
Mario Lopez
1
tbh solusi sebenarnya adalah dengan menambahkan skema resmi ... silakan lihat jawaban saya di bawah ini
Stefan Z Camilleri
Berikut adalah masalah terkait pada github: github.com/NuGet/Home/issues/1836
dimaaan

Jawaban:

96

Anda selalu dapat membuat skema xsd sederhana untuk 'packages.config' untuk menghilangkan peringatan ini. Untuk melakukan ini, buat file bernama "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>

Lokasi file ini (dua opsi)

  • Dalam folder yang sama dengan file 'packages.config',
  • Jika Anda ingin berbagi packages.xsddi beberapa proyek, pindahkan ke folder Visual Studio Schemas (jalurnya mungkin sedikit berbeda, itu D:\Program Files (x86)\Microsoft Visual Studio 10.0\Xml\Schemasuntuk saya).

Kemudian, edit <packages>tag dalam packages.configfile (tambahkan xmlnsatribut):

<packages xmlns="urn:packages">

Sekarang peringatan akan hilang (bahkan jika file packages.config terbuka di Visual Studio).

Łukasz Wiatrak
sumber
1
Tidakkah Anda harus memodifikasi baris kedua XSL: <xs: schema xmlns: xs = " w3.org/2001/XMLSchema " targetNamespace = "urn: paket" xmlns = "urn: paket">
Uri
1
Apakah Anda tahu mengapa Visual Studio tidak membuat file xsd itu?
Anders Lindén
1
u targetFrameworkatribut tidak terjawab dalam file skema xml. Saya mendapatkan kesalahantargetFramework attribute is not defined
shashwat
2
Saya menemukan bahwa menggunakan solusi Anda dengan kerangka kerja entitas, konsol NuGet tidak dapat menguraikan paket saya. Config dengan benar dan terus mengatakan kepada saya bahwa paket EnitityFramework tidak diinstal di proyek saya. Saya menggunakan EF 6.1.0 dengan NuGet 2.8.50313.46 pada VS2013 pembaruan terakhir 2.
misterfrb
7
Solusi ini memecah instalasi otomatis fitur paket yang hilang di vs2012 / nuget. Peringatan itu hilang, tetapi saya harus mencari waktu selama berjam-jam, mengapa vs2012 tidak menginstal paket yang hilang lagi. Jadi solusi yang lebih baik (jawaban di stackoverflow.com/questions/2833243/… ) adalah membuat skema melalui menu XML -> Create Schema (vs 2012 akan secara otomatis menambahkannya ke daftar skema yang digunakan) - tidak perlu mengubah. config, tidak ada istirahat fitur lainnya
outofmind
188

Anda akan melihatnya hanya ketika file terbuka. Saat Anda akan menutup file di Visual Studio, peringatan akan hilang

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

Tzvi Gregory Kaidanov
sumber
8
Ha, mengabaikan masalah membuatnya hilang: D. Tetapi bisakah yang tidak bisa Anda lihat melukai Anda?
JSideris
5
right @gregory kita harus mengabaikan ini .. ada dampak lain dari peringatan ini. Itu dihasilkan oleh nugetdan nugettahu cara menggunakan file ini dengan sangat baik.
shashwat
Ya, ini seharusnya jawaban yang diterima. Yang di atas adalah salah satu alasan mengapa saya harus memakai wig di tempat kerja.
neilhighley
@neilhighley Terima kasih kawan. Saya tidak terlalu ingat masalah ini, tetapi senang saya bisa membantu. LOL
Tzvi Gregory Kaidanov
@RyanRodemoyer Terima kasih kawan. Saya tidak terlalu ingat masalah ini, tetapi senang saya bisa membantu. LOL
Tzvi Gregory Kaidanov
116

Sebenarnya jawaban yang benar untuk ini adalah dengan hanya menambahkan skema ke dokumen Anda, seperti itu

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

... dan kamu selesai :)

Jika XSD belum di-cache dan tidak tersedia, Anda dapat menambahkannya sebagai berikut dari konsol NuGet

Install-Package NuGet.Manifest.Schema -Version 2.0.0

Setelah ini selesai, seperti disebutkan dalam komentar di bawah, Anda mungkin ingin memindahkannya dari folder Anda saat ini ke folder skema resmi yang ditemukan di

%VisualStudioPath%\Xml\Schemas
Stefan Z Camilleri
sumber
Kenapa saya tidak bisa mengunjungi URL itu?
andrewb
4
Anda benar dalam mengatakan bahwa xsd yang dimaksud tidak dapat diakses saat ini, yang mengatakan, dengan definisi W3C mereka, sesat mungkin, deklarasi xmlns (namespace) tidak lebih dari string dalam bentuk URI, dan tidak diperlukan, atau disarankan, bahwa sumber daya sebenarnya tersedia di sana ( en.wikipedia.org/wiki/XML_namespace )
Stefan Z Camilleri
1
Ya, yang paling pasti, itu adalah xsd itu sendiri. Visual Studio tidak benar-benar memvalidasi skema, itu adalah perpustakaan / majelis yang mengkonsumsi dokumen XML yang akan melakukan validasi. Satu-satunya alasan VS membutuhkan informasi ini adalah untuk memberikan intellisense. Ketika sumber daya tidak dapat ditemukan, VS mungkin menggunakan contoh pre-cache dari xsd, yang dapat ditemukan di% VsInstallDir% \ xml \ Schemas
Stefan Z Camilleri
4
Jadi sekarang saya mendapatkan 13 pesan Info ("Tidak dapat menemukan info skema ...") alih-alih hanya satu Pesan peringatan ... jenis rasanya seperti langkah mundur :-)
Riegardt Steyn
1
Sebagai catatan, saya baru-baru ini memiliki masalah dengan menambahkan ruang nama yang mengacaukan NuGet. Sangat disayangkan karena saya lebih suka untuk tidak memiliki peringatan.
meh-uk
7

Tidak ada jawaban yang akan menyelesaikan masalah Anda secara permanen. Jika Anda pergi ke jalur menambahkan XSD (Dari menu Xml, pilih "Buat skema"), Anda akhirnya akan mengalami masalah dengan manajer paket karena akan membersihkan file paket.config Anda ketika Anda menambahkan paket baru.

Solusi terbaik adalah abaikan saja dengan menutup file ketika Anda tidak menggunakannya.

Baris
sumber
+1; Perlu diketahui bahwa ini juga berfungsi (dan tidak akan merusak manajer paket).
rsenna
5

Masalahnya adalah, Anda memerlukan skema xsd untuk packages.config.

Ini adalah bagaimana Anda dapat membuat skema ( saya menemukannya di sini) :

Buka file Config Anda -> XML -> Buat Skema

masukkan deskripsi gambar di sini

Ini akan membuat packages.xsduntuk Anda, dan membukanya di Visual Studio:

masukkan deskripsi gambar di sini

Dalam kasus saya, packages.xsddibuat di bawah jalur ini:

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

Sekarang saya tidak ingin referensi packages.xsddari folder Temp, tapi saya ingin itu ditambahkan ke solusi saya dan ditambahkan ke kontrol sumber, sehingga pengguna lain bisa mendapatkannya ... jadi saya menyalin packages.xsddan menempelkannya ke folder solusi saya. Lalu saya menambahkan file ke solusi saya:

1. Salin packages.xsddi folder yang sama dengan solusi Anda

2. Dari VS, klik kanan pada solusi -> Tambah -> Item yang Ada ... lalu tambahkanpackages.xsd

masukkan deskripsi gambar di sini

Jadi, sekarang kami telah membuat packages.xsddan menambahkannya ke Solusi. Yang perlu kita lakukan adalah memberi tahu file konfigurasi untuk menggunakan skema ini.

Buka file konfigurasi, lalu dari menu atas pilih:

XML -> Skema ...

Tambahkan packages.xsd, dan pilih Gunakan skema ini (lihat di bawah)

masukkan deskripsi gambar di sini

Hooman Bahreini
sumber
4

Ini terjadi karena VS tidak tahu skema file ini. Perhatikan bahwa file ini lebih merupakan detail implementasi, dan bukan sesuatu yang biasanya perlu Anda buka secara langsung. Sebagai gantinya, Anda dapat menggunakan dialog NuGet untuk mengelola paket yang diinstal dalam suatu proyek.

David Ebbo
sumber
Tidak masalah bahwa Anda menggunakan NuGet untuk menginstal paket. File `packages.config 'yang sama dibangun, dan masih menghasilkan peringatan kompiler itu.
ProfK
0

Ini berfungsi dan tetap bahkan setelah menambahkan paket baru:

Tambahkan yang berikut! DOCTYPE di atas elemen <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>
]>
chuckc
sumber