nuget 'paketleri' öğesi uyarı olarak bildirilmedi


142

bir showtopper değil, bir projede nuget kullanırken, bu şekle sahip bir Packages.config dosyası oluşturur

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

bu VS'de bir uyarı verir

The 'packages' element is not declared.

Sorunun kökeni sanırım xml bildirimi ile ilgili bir şey var.

Ayrıca varsayılan tanım paketinin uyarı atmaması gerektiğini düşünüyorum.

Bu uyarıyı almamak için neyi değiştirmem gerektiğini bilen var mı? (yani yalnızca dosya açıkken görebilsem bile, belirli CA kuralları açıkken sürekli bir uyarı olarak gösterilir.)


3
Bu konuda daha iyi olduğunu düşündüğüm [bu çözümü] [1] buldum. [1]: stackoverflow.com/questions/2833243/…
Mario Lopez

1
tbh asıl çözüm resmi şemayı eklemektir ... lütfen aşağıdaki cevabımı görün
Stefan Z Camilleri

İşte github'da
dimaaan

Yanıtlar:


96

Bu uyarıdan kurtulmak için 'Packages.config' için her zaman basit xsd şeması yapabilirsiniz. Bunu yapmak için, "Packages.xsd" adlı bir dosya oluşturun:

<?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>

Bu dosyanın konumu (iki seçenek)

  • 'Packages.config' dosyasıyla aynı klasörde,
  • Birden packages.xsdçok projede paylaşmak istiyorsanız , Visual Studio Schemas klasörüne taşıyın (yol biraz farklı olabilir, bu D:\Program Files (x86)\Microsoft Visual Studio 10.0\Xml\Schemasbenim için).

Ardından, düzenleme <packages>etiket packages.configdosyası (eklenti xmlnsözniteliği):

<packages xmlns="urn:packages">

Şimdi uyarı kaybolmalıdır (Packages.config dosyası Visual Studio'da açık olsa bile).


1
XSL'nin ikinci satırını değiştirmeniz gerekmez: <xs: schema xmlns: xs = " w3.org/2001/XMLSchema " targetNamespace = "urn: paketleri" xmlns = "urn: paketleri">
Uri

1
Visual Studio'nun bu xsd dosyasını neden oluşturmadığını biliyor musunuz?
Anders Lindén

1
u targetFrameworkxml şema dosyasında öznitelik kaçırdı . Hata alıyorumtargetFramework attribute is not defined
shashwat

2
Çözümünüzü varlık çerçevesiyle birlikte kullandığımda NuGet konsolunun paketimi ayrıştıramadığını fark ettim ve EnitityFramework paketinin projeme yüklenmediğini söyledim. VS2013 nihai güncelleme 2 üzerinde NuGet 2.8.50313.46 ile EF 6.1.0 kullanıyorum.
misterfrb

7
Bu çözüm, vs2012 / nuget'teki eksik paketlerin otomatik kurulumunu kırar. Uyarı gitti, ancak vs2012'nin neden eksik paketleri yüklemediğini öğrenmek bana saatler sürdü. Yani daha iyi bir çözüm ( stackoverflow.com/questions/2833243/… içinde cevap ) XML -> Şema Oluştur (şemaya karşı otomatik olarak kullanılan şemalar listesine ekleyecektir) menüsü aracılığıyla bir şema oluşturmaktır - değiştirmeye gerek yoktur. config, diğer özelliklerin kesilmesi yok
outofmind

188

Yalnızca dosya açıkken görürsünüz. Visual Studio'da dosyayı kapattığınızda uyarılar kaybolur

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


8
Ha, problemi görmezden gelmek sorunu ortadan kaldırır: D. Ama göremediğin şey seni incitebilir mi?
JSideris

5
right @gregory bunu görmezden gelmeliyiz .. bu uyarının başka bir etkisi daha var. Tarafından oluşturulur nugetve nugetbu dosyanın çok iyi nasıl kullanılacağını bilir.
shashwat

Evet, bu kabul edilen cevap olmalı. Yukarıdaki bir iş yerinde bir peruk giymek zorunda nedenlerinden biridir.
neilhighley

@neilhighley Teşekkürler çocuklar. Sorunu tam olarak hatırlamıyorum ama yardımcı olabileceğim için mutluyum. LOL
Tzvi Gregory Kaidanov

@RyanRodemoyer Teşekkürler çocuklar. Sorunu tam olarak hatırlamıyorum ama yardımcı olabileceğim için mutluyum. LOL
Tzvi Gregory Kaidanov

116

Aslında bunun doğru cevabı şemanı belgenize eklemektir.

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

... ve işiniz bitti :)

XSD zaten önbelleğe alınmamış ve kullanılamıyorsa, NuGet konsolundan aşağıdaki gibi ekleyebilirsiniz

Install-Package NuGet.Manifest.Schema -Version 2.0.0

Bu yapıldıktan sonra, aşağıdaki bir yorumda belirtildiği gibi, onu geçerli klasörünüzde bulunan resmi şema klasörüne taşımak isteyebilirsiniz.

%VisualStudioPath%\Xml\Schemas

Neden bu URL’ye gidemiyorum?
andrewb

4
Söz konusu xsd'nin şu anda erişilebilir olmadığını söyleyerek haklısınız, yani W3C tanımlarıyla, olabildiğince yanıltıcı olarak, xmlns (ad alanı) bildirimi bir URI biçimindeki bir dizeden başka bir şey değildir ve bir kaynağın orada gerçekten kullanılabilir olması gerekli değildir veya önerilmemektedir ( en.wikipedia.org/wiki/XML_namespace )
Stefan Z Camilleri

1
Evet, kesinlikle xsd'nin kendisi. Visual Studio şemayı gerçekten doğrulamaz, doğrulamayı yapacak XML belgesini tüketen kütüphane / derlemedir. VS'nin bu bilgilere ihtiyaç duymasının tek nedeni akıllılık sağlamaktır. Kaynak bulunamadığı zaman, VS xsd önceden önbelleğe örneği kullanıyor olabilir, yani bulunabilir% VsInstallDir% \ xml \ Şemalar
Stefan Z Camilleri

4
Yani şimdi ben :-) bir adım geri gibi hissediyor tür-of ... ( "... şema bilgisi bulunamadı") yerine sadece bir uyarı mesajının 13 Bilgi mesajları alıyorum
Riegardt Steyn

1
Son zamanlarda NuGet'i sıkıştıran bu ad alanlarını eklemeyle ilgili sorunlar yaşadım. Uyarıları almamayı tercih ettiğim için talihsiz bir durum.
meh-uk

7

Cevapların hiçbiri sorununuzu kalıcı olarak çözmez. XSD ekleme yoluna giderseniz (Xml menüsünden "Şema oluştur" u seçin), yeni bir paket eklediğinizde package.config dosyanızı temizleyeceği için paket yöneticisinde sorun yaşarsınız.

En iyi çözüm, dosyayı kullanmadığınızda dosyayı kapatarak yok saymaktır.


+ 1; Sadece unutmayın , bu da çalışır (ve paket yöneticisini kırmak olmaz).
rsenna

5

Sorun şu ki, bir xsd şemasına ihtiyacınız var packages.config.

Bir şema oluşturabilirsiniz ( burada buldum) :

Config dosyanızı açın -> XML -> Şema Oluştur

resim açıklamasını buraya girin

Bu packages.xsdsizin için bir oluşturur ve Visual Studio'da açar:

resim açıklamasını buraya girin

Benim durumumda, packages.xsdbu yol altında oluşturuldu:

C: \ Kullanıcılar \ KullanıcıAdım \ AppData \ Local \ Temp

Şimdi packages.xsdbir Temp klasöründen başvurmak istemiyorum, ancak çözümüme eklenmesini ve kaynak denetimine eklenmesini istiyorum, böylece diğer kullanıcılar bunu alabilir ... böylece kopyaladım packages.xsdve çözüm klasörüne yapıştırdım. Sonra dosyayı çözümüme ekledim:

1. packages.xsdÇözümünüzle aynı klasöre kopyalayın

2. VS'den, çözüme sağ tıklayın -> Ekle -> Mevcut Öğe ... ve ardındanpackages.xsd

resim açıklamasını buraya girin

Şimdi, packages.xsdonu yarattık ve Çözüme ekledik. Tek yapmamız gereken, yapılandırma dosyasına bu şemayı kullanmasını söylemektir.

Yapılandırma dosyasını açın, ardından üst menüden seçin:

XML -> Şemalar ...

Ekleyin packages.xsdve Bu şemayı kullan'ı seçin (aşağıya bakın)

resim açıklamasını buraya girin


4

Bu, VS bu dosyanın şemasını bilmediği için olur. Bu dosyanın daha çok bir uygulama ayrıntısı olduğunu ve normalde doğrudan açmanız gereken bir şey olmadığını unutmayın. Bunun yerine, bir projede yüklü paketleri yönetmek için NuGet iletişim kutusunu kullanabilirsiniz.


Paketleri yüklemek için NuGet'i kullanmanız önemli değildir. Aynı `Packages.config 'dosyası oluşturulur ve yine de derleyici uyarısı oluşturur.
ProfK

0

Bu, yeni bir paket ekledikten sonra bile çalışır ve kalır:

Aşağıdaki! DOCTYPE öğesini <packages> öğesinin üstüne ekleyin:

<?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>
]>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.