Phần tử 'gói' của nuget không được khai báo


142

không phải là một showstopper nhưng khi sử dụng nuget trong một dự án, nó sẽ tạo ra một tệp tests.config với hình dạng này

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

điều này đưa ra một cảnh báo trong VS

The 'packages' element is not declared.

Nguồn gốc của vấn đề có liên quan đến khai báo xml tôi đoán.

Ngoài ra tôi nghĩ rằng gói định nghĩa mặc định không nên đưa ra cảnh báo.

Có ai biết tôi nên thay đổi nó thành gì để tôi không nhận được cảnh báo này không? (tức là ngay cả khi tôi chỉ có thể nhìn thấy nó khi tệp được mở, nó cũng hiển thị như một cảnh báo liên tục với các quy tắc CA nhất định trên.)


3
Tôi tìm thấy [giải pháp này] [1] cho chủ đề này, mà tôi nghĩ là tốt hơn. [1]: stackoverflow.com/questions/2833243/ Mạnh
Mario Lopez

1
tbh giải pháp thực sự là thêm lược đồ chính thức ... vui lòng xem câu trả lời của tôi dưới đây
Stefan Z Camilleri

Đây là vấn đề tương ứng trên github: github.com/NuGet/Home/issues/1836
dimaaan

Câu trả lời:


96

Bạn luôn có thể tạo lược đồ xsd đơn giản cho 'tests.config' để thoát khỏi cảnh báo này. Để thực hiện việc này, hãy tạo tệp có tên "gói.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>

Vị trí của tệp này (hai tùy chọn)

  • Trong cùng thư mục với tệp 'tests.config',
  • Nếu bạn muốn chia sẻ packages.xsdtrên nhiều dự án, hãy chuyển nó vào thư mục Visual Studio Schemas (đường dẫn có thể hơi khác nhau, đó là D:\Program Files (x86)\Microsoft Visual Studio 10.0\Xml\Schemasđối với tôi).

Sau đó, chỉnh sửa <packages>thẻ trong packages.configtệp (thêm xmlnsthuộc tính):

<packages xmlns="urn:packages">

Bây giờ cảnh báo sẽ biến mất (ngay cả khi tệp tests.config được mở trong Visual Studio).


1
Bạn không phải sửa đổi dòng thứ hai của XSL: <xs: lược đồ xmlns: xs = " w3.org/2001/XMLSchema " targetNamespace = "urn: gói" xmlns = "urn: gói">
Uri

1
Bạn có biết tại sao Visual Studio không tạo tệp xsd đó không?
Anders Lindén

1
u bỏ lỡ targetFrameworkthuộc tính trong tệp lược đồ xml. Tôi đang gặp lỗitargetFramework attribute is not defined
shashwat

2
Tôi thấy rằng sử dụng giải pháp của bạn với khung thực thể, bảng điều khiển NuGet không thể phân tích chính xác gói của tôi .config và liên tục nói với tôi rằng gói EnitityFramework chưa được cài đặt trong dự án của tôi. Tôi đang sử dụng EF 6.1.0 với NuGet 2.8.50313.46 trên bản cập nhật cuối cùng của VS2013 2.
misterfrb

7
Giải pháp này phá vỡ cài đặt tự động các tính năng gói bị thiếu trong vs2012 / nuget. Cảnh báo đã biến mất, nhưng tôi mất nhiều giờ để tìm hiểu, tại sao vs2012 không cài đặt các gói bị thiếu nữa. Vì vậy, giải pháp tốt hơn (câu trả lời trong stackoverflow.com/questions/2833243/, ) là tạo một lược đồ thông qua menu XML -> Tạo lược đồ (so với năm 2012 sẽ tự động thêm nó vào danh sách các lược đồ đã sử dụng) - không cần thay đổi. cấu hình, không phá vỡ các tính năng khác
outofmind

188

Bạn sẽ chỉ nhìn thấy nó khi tập tin được mở. Khi bạn đóng tệp trong Visual Studio, các cảnh báo sẽ biến mất

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


8
Ha, bỏ qua vấn đề làm cho nó biến mất: D. Nhưng những gì bạn không thể nhìn thấy làm tổn thương bạn?
JSideris

5
phải @gregory chúng ta nên bỏ qua điều này .. có tác động khác của cảnh báo này. Nó được tạo ra bởi nugetnugetbiết cách sử dụng tập tin này rất tốt.
shashwat

Vâng, đây sẽ là câu trả lời được chấp nhận. Một trong những lý do trên là một trong những lý do tại sao tôi phải đội tóc giả tại nơi làm việc.
neilhighley 7/12/2016

@neilhighley Cảm ơn các bạn. Đừng nhớ vấn đề này nhưng tôi rất vui vì có thể giúp. LOL
Tzvi Gregory Kaidanov 8/12/2016

@RyanRodemoyer Cảm ơn các bạn. Đừng nhớ vấn đề này nhưng tôi rất vui vì có thể giúp. LOL
Tzvi Gregory Kaidanov 8/12/2016

116

Trên thực tế, câu trả lời chính xác cho điều này là chỉ cần thêm lược đồ vào tài liệu của bạn, như vậy

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

... và bạn đã hoàn thành :)

Nếu XSD chưa được lưu trong bộ nhớ cache và không khả dụng, bạn có thể thêm nó như sau từ bảng điều khiển NuGet

Install-Package NuGet.Manifest.Schema -Version 2.0.0

Khi điều này được thực hiện, như được ghi chú trong một bình luận bên dưới, bạn có thể muốn di chuyển nó từ thư mục hiện tại của bạn sang thư mục lược đồ chính thức được tìm thấy trong

%VisualStudioPath%\Xml\Schemas

Tại sao tôi không thể truy cập URL đó?
andrewb

4
Bạn đã đúng khi nói rằng xsd trong câu hỏi hiện không thể truy cập được, theo định nghĩa W3C của họ, gây hiểu lầm như có thể, khai báo xmlns (không gian tên) không có gì khác ngoài một chuỗi dưới dạng URI và không yêu cầu, cũng không được đề xuất rằng tài nguyên thực sự được cung cấp ở đó ( en.wikipedia.org/wiki/XML_namespace )
Stefan Z Camilleri

1
Vâng, chắc chắn nhất, đó là xsd chính nó. Visual Studio không thực sự xác nhận lược đồ, đó là thư viện / hội đồng tiêu thụ tài liệu XML sẽ thực hiện xác thực. Lý do duy nhất VS cần thông tin này là để cung cấp thông tin. Khi không thể tìm thấy tài nguyên, VS có thể đang sử dụng một phiên bản được lưu trước của xsd, có thể tìm thấy trong% VsInstallDir% \ xml \ Schemas
Stefan Z Camilleri

4
Vì vậy, bây giờ tôi nhận được 13 tin nhắn Thông tin ("Không thể tìm thấy thông tin lược đồ ...") thay vì chỉ một tin nhắn Cảnh báo ... cảm giác giống như một bước lùi :-)
Riegardt Steyn

1
Lưu ý rằng gần đây tôi đã gặp vấn đề với việc thêm các không gian tên làm hỏng NuGet. Thật không may vì tôi không muốn có những cảnh báo.
meh-uk

7

Không có câu trả lời sẽ giải quyết vấn đề của bạn vĩnh viễn. Nếu bạn đi đến đường dẫn thêm XSD (Từ menu Xml, chọn "Tạo lược đồ"), bạn sẽ gặp vấn đề với trình quản lý gói vì nó sẽ dọn sạch tệp gói.config của bạn khi bạn thêm gói mới.

Giải pháp tốt nhất là bỏ qua bằng cách đóng tệp khi bạn không sử dụng.


+1; chỉ cần lưu ý rằng điều này cũng hoạt động (và sẽ không phá vỡ trình quản lý gói).
rsenna

5

Vấn đề là, bạn cần một lược đồ xsd cho packages.config.

Đây là cách bạn có thể tạo một lược đồ ( tôi tìm thấy nó ở đây) :

Mở tệp cấu hình của bạn -> XML -> Tạo lược đồ

nhập mô tả hình ảnh ở đây

Điều này sẽ tạo một cái packages.xsdcho bạn và mở nó trong Visual Studio:

nhập mô tả hình ảnh ở đây

Trong trường hợp của tôi, packages.xsdđã được tạo theo đường dẫn này:

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

Bây giờ tôi không muốn tham chiếu packages.xsdtừ thư mục Temp, nhưng tôi muốn nó được thêm vào giải pháp của mình và thêm vào kiểm soát nguồn, vì vậy những người dùng khác có thể lấy nó ... vì vậy tôi đã sao chép packages.xsdvà dán nó vào thư mục giải pháp của mình. Sau đó, tôi đã thêm các tập tin vào giải pháp của tôi:

1. Sao chép packages.xsdtrong cùng thư mục với giải pháp của bạn

2. Từ VS, nhấp chuột phải vào giải pháp -> Thêm -> Mục hiện có ... và sau đó thêmpackages.xsd

nhập mô tả hình ảnh ở đây

Vì vậy, bây giờ chúng tôi đã tạo packages.xsdvà thêm nó vào Giải pháp. Tất cả những gì chúng ta cần làm là bảo tệp cấu hình sử dụng lược đồ này.

Mở tệp cấu hình, sau đó từ menu trên cùng chọn:

XML -> Lược đồ ...

Thêm của bạn packages.xsdvà chọn Sử dụng lược đồ này (xem bên dưới)

nhập mô tả hình ảnh ở đây


4

Điều này xảy ra vì VS không biết lược đồ của tệp này. Lưu ý rằng tệp này là một chi tiết triển khai và không phải là thứ bạn thường cần mở trực tiếp. Thay vào đó, bạn có thể sử dụng hộp thoại NuGet để quản lý các gói được cài đặt trong một dự án.


Việc bạn sử dụng NuGet để cài đặt các gói không thành vấn đề. Tệp `gói.config 'tương tự được xây dựng và nó vẫn tạo cảnh báo trình biên dịch đó.
ProfK

0

Điều này hoạt động và vẫn còn sau khi thêm một gói mới:

Thêm phần sau! DOCTYPE phía trên phần tử <gói>:

<?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>
]>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.