องค์ประกอบ 'แพคเกจ' nuget ไม่ได้ประกาศคำเตือน


142

ไม่ใช่ showstopper แต่เมื่อใช้ 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/…
Mario Lopez

1
tbh ทางออกที่แท้จริงคือการเพิ่มสคีอย่างเป็นทางการ ... กรุณาดูคำตอบของฉันด้านล่าง
Stefan Z Camilleri

นี่คือปัญหาที่เกี่ยวข้องกับ github: github.com/NuGet/Home/issues/1836
dimaaan

คำตอบ:


96

คุณสามารถสร้าง xsd แบบง่าย ๆ สำหรับ 'packages.config' เพื่อกำจัดคำเตือนนี้ หากต้องการทำสิ่งนี้ให้สร้างไฟล์ชื่อ "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">

ตอนนี้คำเตือนควรหายไป (แม้ว่าไฟล์ packages.config จะเปิดใน Visual Studio)


1
คุณไม่ต้องแก้ไขบรรทัดที่สองของ XSL: <xs: schema xmlns: xs = " w3.org/2001/XMLSchema " targetNamespace = "urn: packages" xmlns = "urn: packages">
Uri

1
คุณรู้หรือไม่ว่าเหตุใด Visual Studio จึงไม่สร้างไฟล์ xsd นั้น
Anders Lindén

1
ไม่ได้targetFrameworkระบุแอตทริบิวต์ในไฟล์ xml schema ฉันได้รับข้อผิดพลาดtargetFramework attribute is not defined
shashwat

2
ฉันพบว่าการใช้โซลูชันของคุณกับเฟรมเวิร์กเอนทิตี้ของคอนโซล NuGet ไม่สามารถแยกแพคเกจของฉันได้อย่างถูกต้องและบอกฉันต่อไปว่าแพ็คเกจ EnitityFramework ไม่ได้ถูกติดตั้งในโครงการของฉัน ฉันใช้ EF 6.1.0 กับ NuGet 2.8.50313.46 ในการอัพเดทขั้นสุดท้าย VS2013 2
misterfrb

7
โซลูชันนี้แบ่งการติดตั้งคุณลักษณะแพ็คเกจที่หายไปโดยอัตโนมัติใน vs2012 / nuget คำเตือนหายไป แต่ฉันต้องใช้เวลาหลายชั่วโมงเพื่อหาสาเหตุที่ทำไม vs2012 จึงไม่ติดตั้งแพ็คเกจที่ขาดหายไปอีกต่อไป ดังนั้นทางออกที่ดีกว่า (คำตอบในstackoverflow.com/questions/2833243/… ) คือการสร้างสคีมาผ่านเมนู XML -> สร้างสคีมา (vs 2012 จะเพิ่มลงในรายการสคีมาที่ใช้โดยอัตโนมัติ) - ไม่จำเป็นต้องเปลี่ยน config, ไม่มีการหยุดพักของคุณสมบัติอื่น ๆ
outofmind

188

คุณจะเห็นเมื่อเปิดไฟล์เท่านั้น เมื่อคุณปิดไฟล์ใน Visual Studio คำเตือนจะหายไป

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


8
ฮาการเพิกเฉยปัญหาทำให้มันหายไป: D. แต่สิ่งที่คุณเห็นไม่สามารถทำร้ายคุณได้หรือไม่?
JSideris

5
สิทธิในการรวม @ เราควรละเว้นนี้ .. มีผลกระทบอื่น ๆ ของคำเตือนนี้ มันถูกสร้างขึ้นโดยnugetและnugetรู้วิธีการใช้ไฟล์นี้เป็นอย่างดี
shashwat

ใช่นี่ควรเป็นคำตอบที่ยอมรับได้ เหตุผลหนึ่งที่ทำให้ฉันต้องใส่วิกในที่ทำงาน
neilhighley

@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

เมื่อเสร็จแล้วดังที่ระบุไว้ในความคิดเห็นด้านล่างคุณอาจต้องการย้ายจากโฟลเดอร์ปัจจุบันของคุณไปยังโฟลเดอร์ schema อย่างเป็นทางการที่พบใน

%VisualStudioPath%\Xml\Schemas

ทำไมฉันไม่ไปที่ URL นั้น
andrewb

4
คุณถูกต้องในการบอกว่า xsd ที่เป็นปัญหาไม่สามารถเข้าถึงได้ในขณะนี้ซึ่งกล่าวโดยนิยาม W3C ของพวกเขาซึ่งทำให้เข้าใจผิดอย่างที่มันอาจจะเป็นการประกาศ xmlns (namespace) ไม่มีอะไรมากไปกว่าสตริงในรูปแบบของ URI และ ไม่จำเป็นหรือไม่แนะนำให้ใช้ทรัพยากรที่มีอยู่จริง ( en.wikipedia.org/wiki/XML_namespace )
Stefan Z Camilleri

1
ใช่แน่นอนที่สุดคือ xsd เอง Visual Studio ไม่ได้ตรวจสอบความถูกต้องของสคีมาจริง ๆ มันเป็นไลบรารี่ / แอสเซมบลีที่ใช้เอกสาร XML ที่จะทำการตรวจสอบเหตุผลเดียวที่ VS ต้องการข้อมูลนี้คือการให้ข้อมูลภายใน เมื่อไม่พบทรัพยากร VS อาจใช้อินสแตนซ์ที่แคชล่วงหน้าของ xsd ซึ่งสามารถพบได้ใน% VsInstallDir% \ xml \ Schemas
Stefan Z Camilleri

4
ดังนั้นตอนนี้ฉันได้รับ 13 ข้อมูลข้อความ ("ไม่สามารถหาข้อมูลสคีมา ... ") แทนที่จะเป็นเพียงหนึ่งข้อความเตือน ... ชนิดของความรู้สึกเหมือนย้อนกลับไป :-)
Riegardt Steyn

1
โปรดทราบว่าเมื่อเร็ว ๆ นี้ฉันมีปัญหาในการเพิ่มเนมสเปซเหล่านั้นทำให้ NuGet สะดุด มันโชคร้ายเพราะฉันไม่ต้องการมีคำเตือน
meh-uk

7

ไม่มีคำตอบใดที่จะแก้ปัญหาของคุณได้อย่างถาวร หากคุณไปที่เส้นทางของการเพิ่ม XSD (จากเมนู Xml ให้เลือก "สร้างสคีมา") คุณจะพบปัญหาเกี่ยวกับตัวจัดการแพคเกจเนื่องจากมันจะทำการล้างไฟล์ packages.config ของคุณเมื่อคุณเพิ่มแพ็คเกจใหม่

ทางออกที่ดีที่สุดคือละเว้นโดยปิดไฟล์เมื่อคุณไม่ใช้


+1; เพิ่งทราบว่านี่ยังใช้งานได้ (และจะไม่ทำลายตัวจัดการแพ็กเกจ)
rsenna

5

ปัญหาคือคุณต้องมีสคี xsd packages.configสำหรับ

นี่คือวิธีที่คุณสามารถสร้างสคีมา ( ฉันพบได้ที่นี่) :

เปิดไฟล์กำหนดค่าของคุณ -> XML -> สร้างสคีมา

ป้อนคำอธิบายรูปภาพที่นี่

สิ่งนี้จะสร้างpackages.xsdสำหรับคุณและเปิดใน Visual Studio:

ป้อนคำอธิบายรูปภาพที่นี่

ในกรณีของฉันpackages.xsdถูกสร้างขึ้นภายใต้เส้นทางนี้:

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

ตอนนี้ฉันไม่ต้องการอ้างอิงpackages.xsdจากโฟลเดอร์ชั่วคราว แต่ฉันต้องการให้เพิ่มไปยังโซลูชันของฉันและเพิ่มการควบคุมแหล่งที่มาเพื่อให้ผู้ใช้รายอื่นสามารถรับมัน ... ดังนั้นฉันจึงคัดลอกpackages.xsdและวางลงในโฟลเดอร์โซลูชันของฉัน จากนั้นฉันเพิ่มไฟล์ลงในโซลูชันของฉัน:

1. คัดลอกpackages.xsdในโฟลเดอร์เดียวกับโซลูชันของคุณ

2. จาก VS ให้คลิกขวาที่โซลูชัน -> เพิ่ม -> รายการที่มีอยู่ ...จากนั้นเพิ่มpackages.xsd

ป้อนคำอธิบายรูปภาพที่นี่

ดังนั้นตอนนี้เราได้สร้างpackages.xsdและเพิ่มลงในโซลูชัน สิ่งที่เราต้องทำคือบอกไฟล์กำหนดค่าให้ใช้สคีมานี้

เปิดไฟล์กำหนดค่าจากนั้นเลือกเมนูด้านบน:

XML -> Schemas ...

เพิ่มของคุณpackages.xsdและเลือกใช้สคีมานี้ (ดูด้านล่าง)

ป้อนคำอธิบายรูปภาพที่นี่


4

สิ่งนี้เกิดขึ้นเนื่องจาก VS ไม่ทราบสคีมาของไฟล์นี้ โปรดทราบว่าไฟล์นี้มีรายละเอียดการใช้งานมากกว่าและไม่ใช่สิ่งที่คุณต้องเปิดโดยตรง แต่คุณสามารถใช้กล่องโต้ตอบ NuGet เพื่อจัดการแพ็คเกจที่ติดตั้งในโครงการ


ไม่สำคัญว่าคุณจะใช้ NuGet เพื่อติดตั้งแพ็คเกจ ไฟล์ `packages.config 'เดียวกันถูกสร้างขึ้นและยังคงสร้างคำเตือนคอมไพเลอร์นั้น
ProfK

0

วิธีนี้ใช้ได้ผลและยังคงอยู่แม้หลังจากเพิ่มแพ็คเกจใหม่:

เพิ่มรายการต่อไปนี้! DOCTYPE เหนือองค์ประกอบ <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>
]>
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.