Tại sao tôi không thể tham chiếu System.ComponentModel.DataAnnotations?


97

Tôi đang cố gắng sử dụng DataAnnotations trong dự án WPF của mình để chỉ định độ dài tối đa của chuỗi, như sau:

using System.ComponentModel.DataAnnotations;

Tuy nhiên, tôi gặp lỗi

Loại hoặc tên vùng chứa tên 'DataAnnotations' không tồn tại trong vùng tên 'System.ComponentModel' (bạn có thiếu tham chiếu hợp ngữ không?)

Tôi đã nhìn thấy những ví dụ khác, nơi DataAnnotations không tồn tại trong không gian này. Tôi đang sử dụng C # 4. Có lý do gì tại sao tôi không thể sử dụng cái này? Tôi có thể làm gì để sửa chữa nó?


Bạn đã cài đặt MVC chưa? Tôi tin rằng DataAnnotations thuộc về gói đó
dougajmcdonald

3
Có lẽ bạn đang "thiếu một tham chiếu lắp ráp."
phoog

1
Thông báo lỗi được thiết kế để hữu ích, không thể bỏ qua.
Kendall Frey

6
Được rồi, tha thứ cho tôi vì tôi tỏ ra thiếu hiểu biết, nhưng tôi đang tham khảo cách lắp ráp System.ComponentModelvà sử dụng nhiều thành phần khác trong đó. Theo @Hari dưới đây, nó dường như DataAnnotationstồn tại trong hội đồng của chính nó. Tôi nghĩ nó sẽ tồn tại bên trong System.ComponentModelvì nó nằm trong cùng một không gian tên.
DaveDev

Câu trả lời:


156

Bạn phải tham chiếu đến assembly trong đó không gian tên này được xác định (nó không được tham chiếu theo mặc định trong các mẫu studio trực quan). Mở trình quản lý tham chiếu của bạn và thêm tham chiếu vào cụm System.ComponentModel.DataAnnotations (Trình khám phá giải pháp -> Thêm tham chiếu -> Chọn tab .Net -> chọn System.ComponentModel.DataAnnotations từ danh sách)


10
Điều kỳ lạ ở đây là VS không thể cung cấp cho tôi 'Sửa chữa tiềm năng' bình thường cho cái này. Tự hỏi tại sao ...
Todd Vance

Trong VS2019, tab .net không còn ở đó (nữa). Kiểm tra câu trả lời gần đây hơn của JohnB đang phù hợp với tôi!
peter.cyc

19

Nếu sử dụng .NET Core hoặc .NET Standard

sử dụng:

Quản lý các gói NuGet ..

Sử dụng Quản lý gói NuGet

thay vì:

Thêm tài liệu tham khảo...

Không sử dụng Thêm tham chiếu


5
Từ dòng lệnhdotnet add package System.ComponentModel.Annotations
Eric

cũng thông qua cài đặt trình quản lý gói nuget trong VSCode, - -> tiếp theo là lệnh "command + shift + p" (trên mac) - -> và nhập "Trình quản lý gói Nuget" và chọn "thêm gói" từ danh sách tự động hoàn thành - - > và nhập vào Hệ thống .. và đợi tự động hoàn thành để hiển thị gói chính xác và chọn "System.ComponentModel.Annotations" - -> và chọn dự án nơi lắp ráp này cần được đưa vào - -> và chọn "khôi phục" nếu cần thiết lập tài liệu tham khảo.
supi

13

Tới Hệ thống Tham chiếu.ComponentModel.DataAnnotations

Trong một tệp mã có Sử dụng System.ComponentModel.DataAnnotations; ở đầu tệp, chẳng hạn như:

using System.ComponentModel.DataAnnotations;

Thêm tham chiếu .NET vào dự án của bạn bằng cách nhấp chuột phải vào dự án trong trình khám phá giải pháp:

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

Hi vọng điêu nay co ich! Câu hỏi này đã giúp tôi.


8

Nếu bạn không có nó trong tài liệu tham khảo (như tôi không có), bạn cũng có thể thêm NuGet System.ComponentModel.Annotations để lấy các tập hợp và giải quyết lỗi. (Thêm nó vào đây vì câu trả lời này vẫn xuất hiện trên Google vì lỗi)


4

Tôi cũng gặp vấn đề tương tự và tôi đã giải quyết bằng cách thêm tham chiếu vào một trong các dự án của tôi mà không có tham chiếu được đề cập. Nếu bạn có 2-3 dự án trong giải pháp của mình, thì hãy kiểm tra bằng cách thêm tham chiếu này vào các dự án khác.


2

Sử dụng FrameWork phiên bản 4.5 trở lên cho dự án của bạn sau đó vấn đề được giải quyết. Vì không gian tên này dưới 4.5 trở lên.


1
điều đó không chính xác. xem ở đây
itho

Tôi đang sử dụng .NET 4.5.x và nó không được bao gồm. Nhưng, sau đó tôi không sử dụng MVC. Ứng dụng này là một ứng dụng bảng điều khiển không có giao diện người dùng sẽ được chạy như một công việc cron mỗi ngày một lần. Tôi chỉ muốn sử dụng DataAnnotations trong các lớp đại diện cho các thành viên dữ liệu sẽ giữ dữ liệu từ các cột mà tôi truy xuất từ ​​mỗi hàng bảng SQL Server. Tôi sẽ thử thêm nó theo cách thủ công làm tài liệu tham khảo.
MiddleAgedMutantNinjaProgrammer

Có một cái nhìn về nó; ở đây
user2090762

@ user2090762: không gian tên tồn tại, nhưng không phải tất cả các lớp đều tồn tại. Đặc biệt, EmailAddressAttribute chỉ có sẵn cho đến ngày 4.5.
jmoreno 21/12/17

2

Tôi thấy rằng tôi không thể tham chiếu System.ComponentModel.DataAnnotations từ Silverlight 5 với phiên bản dưới đây tại (1). Tôi thấy rằng hội đồng Silverlight 5 không thể sử dụng hội đồng .NET, nó gây ra lỗi "Bạn không thể thêm tham chiếu đến System.ComponentModel.DataAnnotations vì nó không được xây dựng dựa trên thời gian chạy Silverlight. ..." Tôi dự định giải quyết vấn đề này bằng cách hy vọng cài đặt gói Silverlight 5 được tìm thấy tại (2) bên dưới. Nếu điều này không thành công tôi sẽ cập nhật bài đăng này.

[CẬP NHẬT: không thành công. Tôi đã cài đặt mọi thứ liên quan đến Silverlight 5 và tôi không có phiên bản Silverlight của .dll assembly System.ComponentModel.DataAnnotations. Quá tệ. CẬP NHẬT II: Tôi tìm thấy một tệp .dll cũ có tên này từ bản cài đặt trước đó của bộ công cụ của nhà phát triển Silverlight cho Visual Studio 2008 hoặc 2010. Tôi đã thêm tệp này và tệp này dường như 'hoạt động', trong đó IntelliSense hiện đang nhận dạng các thuộc tính trên các thành viên lớp, chẳng hạn như [Display(Name = "My Property Name")]. Điều này có hoạt động với mọi thứ khác trong .dll này hay không, tôi không biết.]

(1)

Microsoft Visual Studio Professional 2013
Version 12.0.21005.1 REL
Microsoft .NET Framework
Version 4.5.51641

Phiên bản đã cài đặt: Chuyên nghiệp

(2) http://go.microsoft.com/fwlink/?LinkId=229318


Bản cập nhật III - Tôi không thể tải System.ComponentModel.DataAnnotations.dll hoạt động ở phía máy khách, đối với Silverlight 5, nhưng kỳ lạ là ở phía máy chủ, dự án Silverlight sử dụng phiên bản .NET v4.5.1 của .dll này. Nhưng phía khách hàng sẽ không chấp nhận phiên bản .NET và yêu cầu phiên bản Silverlight của tệp .dll này, tính đến ngày này tôi không thể tìm thấy ở đâu. Vì vậy, bạn phải làm mà không ở phía khách hàng.
PaulDecember

1

Tôi đã tìm kiếm trợ giúp về chủ đề này khi tôi gặp vấn đề tương tự.

Mặc dù phần sau có thể không phải là Câu trả lời cho câu hỏi được hỏi ban đầu vào năm 2012, nhưng nó có thể là một giải pháp cho những ai bắt gặp chủ đề này.

Một cách để giải quyết vấn đề này là kiểm tra xem dự án của bạn nằm ở đâu trong giải pháp. Hóa ra đối với trường hợp của tôi (tôi đã cố gắng cài đặt một gói NuGet nhưng nó không được và lỗi được liệt kê xuất hiện) rằng tệp dự án của tôi không được bao gồm trong thư mục giải pháp mặc dù hiển thị trong trình khám phá giải pháp. Tôi đã xóa dự án khỏi thư mục ngoài phạm vi và thêm lại dự án nhưng lần này ở đúng vị trí.


0
This error occurs when the reference to the "System.dll" got removed.Solution to the problem is very simple add the reference to "System.dll".The dll is normally available in the following location
"C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727" .Add the reference your problem will get solved .

0

Nếu bạn đã cố gắng cập nhật visual studio từ vs2008 thành vs2010. Và ứng dụng của bạn sử dụng framework 3.5 (và bạn không muốn nâng cấp nó) và cũng đã sử dụng WCF RIA Services BETA ... Tôi có tin xấu ... bạn PHẢI nâng cấp lên WCF RIA Services v1 (BETA không hoạt động trên vs2010 ) ... và do đó ... bạn cũng phải cài đặt bản nâng cấp Silverlight 4 + lên framework 4.0

Xem cái này: http://blog.nappisite.com/2010/05/updating-visual-studio-2008net-35-ria.html


0

Tôi đã nâng cấp từ Silverlight 4 lên Silverlight 5 và sau đó tôi gặp sự cố này. Mặc dù tôi có tham chiếu đến "System.ComponentModel.DataAnnotations" trong "Tham khảo" trong dự án của mình, nó có một dấu hiệu năng suất màu vàng cho biết không thể tìm thấy lắp ráp được tham chiếu trước đó. Hóa ra là các thuộc tính của tham chiếu "System.ComponentModel.DataAnnotations" chỉ ra "Phiên bản cụ thể = Đúng", khi tôi thay đổi điều này thành "Phiên bản cụ thể = Sai", nó đã khắc phục sự cố. Nhấp chuột phải vào tổ hợp "System.ComponentModel.DataAnnotations" trong "Tham khảo" và chọn "Thuộc tính" từ trình đơn ngữ cảnh. Kiểm tra xem giá trị thuộc tính cho "Phiên bản cụ thể = Sai".

Chắc hẳn nó đang tham chiếu đến cụm lắp ráp Silverlight 4 cũ không còn khả dụng sau khi nâng cấp lên Silverlight 5.


0

System.ComponentModel.DataAnnotations được chứa trong assembly riêng của nó, vì vậy bạn cần đảm bảo rằng bạn đã tham chiếu đến nó. Chỉ đơn giản vậy thôi:

1). Nhấp chuột phải vào Soloution và chọn thêm.

2). Chọn tài liệu tham khảo từ danh sách.

3). Tìm kiếm "System.ComponentModel.DataAnnotation" và đánh dấu vào hộp kiểm ở phía bên tay trái của nó và nhấn ok.

Công việc đã hoàn thành, không nên có bất kỳ lỗi giới thiệu nào.


0

Tôi cũng gặp vấn đề này. Điều đó thật ngu ngốc khi tôi thêm một không gian tên giống với Hệ thống. Tôi cố gắng xóa tất cả các tham chiếu, nhưng nó không được giải quyết. Tôi sử dụng "global :: System.ComponentModel", nó cũng đang hoạt động. Khi tôi xóa không gian tên của mình, vấn đề này đã được giải quyết.


-6

Tôi đã gặp vấn đề tương tự, tôi đã giải quyết vấn đề này bằng cách sau.

Nhấp chuột phải vào trang, chọn Thuộc tính. trong hành động xây dựng, hãy chọn Nội dung.

Hy vọng rằng giải pháp này có thể giúp bạn.


Bạn đang đề cập đến "trang" nào? Và điều đó giúp chính xác như thế nào?
Crono

1
Chà, điều này thực sự sai lầm. Nếu bạn làm cho một phần tử dự án được coi là "Nội dung" trong quá trình xây dựng, nó sẽ mất hành vi của nó. Vì vậy, nếu bạn làm điều đó trên một lớp, nó sẽ không được biên dịch nữa và mã của nó sẽ không bao giờ được gọi. Thay vào đó, nó sẽ được sao chép dưới dạng tệp dọc theo tệp nhị phân của đầu ra biên dịch chương trình. Đó là lý do tại sao bạn sẽ ngừng nhận được lỗi biên dịch, nhưng nó chắc chắn không phải là giải pháp cho vấn đề biên dịch.
Ivaylo Slavov
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.