Mengapa saya tidak bisa mereferensikan System.ComponentModel.DataAnnotations?

100

Saya mencoba menggunakan DataAnnotations di proyek WPF saya untuk menentukan panjang string maksimum, dengan yang berikut ini:

using System.ComponentModel.DataAnnotations;

Namun, saya mendapatkan kesalahannya

Jenis atau nama namespace 'DataAnnotations' tidak ada di namespace 'System.ComponentModel' (apakah Anda kehilangan referensi perakitan?)

Saya telah melihat contoh lain yang DataAnnotations memang ada di namespace ini. Saya menggunakan C # 4. Apakah ada alasan mengapa saya tidak dapat menggunakan ini? Apa yang dapat saya lakukan untuk memperbaikinya?

DaveDev
sumber
Apakah Anda sudah memasang MVC? Saya yakin DataAnnotations termasuk dalam paket itu
dougajmcdonald
3
Mungkin Anda "melewatkan referensi perakitan."
phoog
1
Pesan kesalahan dirancang untuk membantu, tidak untuk diabaikan.
Kendall Frey
6
Ok guys, maafkan saya karena terlihat bodoh, tapi saya mereferensikan perakitan System.ComponentModeldan menggunakan berbagai komponen lain di dalamnya. Menurut @Hari di bawah ini, nampaknya itu DataAnnotationsada di majelisnya sendiri. Saya pikir itu akan ada di dalam System.ComponentModelkarena di namespace yang sama.
DaveDev

Jawaban:

157

Anda harus mereferensikan assembly di mana namespace ini ditentukan (tidak direferensikan secara default di template visual studio). Buka manajer referensi Anda dan tambahkan referensi ke rakitan System.ComponentModel.DataAnnotations (Penjelajah solusi -> Tambahkan referensi -> Pilih tab .Net -> pilih System.ComponentModel.DataAnnotations dari daftar)

Hari
sumber
10
Yang aneh di sini adalah VS tidak dapat memberi saya 'Potensi Perbaikan' normal untuk yang satu ini. Bertanya-tanya mengapa ...
Todd Vance
Di VS2019, tab .net sudah tidak ada (lagi). Periksa jawaban JohnB yang lebih baru yang berhasil untuk saya!
peter.cyc
23

Jika menggunakan .NET Core atau .NET Standard

menggunakan:

Kelola Paket NuGet ..

Gunakan Kelola Paket NuGet

dari pada:

Tambahkan Referensi ...

Jangan gunakan Tambahkan Referensi

JohnB
sumber
5
Dari baris perintahdotnet add package System.ComponentModel.Annotations
Eric
juga melalui instalasi nuget package manager di VSCode, - -> diikuti dengan perintah "command + shift + p" (di mac) - -> dan ketik "Nuget Package manager" dan memilih "add package" dari daftar autocompleted - - > dan mengetik di System .. dan menunggu autocomplete menampilkan paket yang benar dan memilih "System.ComponentModel.Annotations" - -> dan memilih proyek di mana rakitan ini perlu disertakan - -> dan memilih "pulihkan" jika perlu buat referensi.
supi
13

Untuk Referensi System.ComponentModel.DataAnnotations

Dalam file kode memiliki Using System.ComponentModel.DataAnnotations; di bagian atas file seperti:

using System.ComponentModel.DataAnnotations;

Tambahkan referensi .NET ke proyek Anda dengan mengklik kanan proyek di penjelajah solusi:

masukkan deskripsi gambar di sini

Semoga ini membantu! Pertanyaan ini membantu saya.

Catto
sumber
8

Jika Anda tidak memilikinya dalam referensi (seperti saya tidak) Anda juga dapat menambahkan NuGet System.ComponentModel.Annotations untuk mendapatkan rakitan dan mengatasi kesalahan. (Menambahkannya di sini karena jawaban ini masih teratas dari Google karena kesalahannya)

Rodger
sumber
4

Saya juga mengalami masalah yang sama dan saya menyelesaikannya dengan menambahkan referensi di salah satu proyek saya yang tidak memiliki referensi yang disebutkan. Jika Anda memiliki 2-3 proyek dalam solusi Anda, periksa dengan menambahkan referensi ini ke proyek lain.

Ashish Sahu
sumber
2

Gunakan FrameWork versi 4.5 dan yang lebih baru untuk proyek Anda, maka masalah terselesaikan. Karena namespace ini di bawah 4.5 ke atas.

pengguna2090762
sumber
1
itu tidak benar. lihat di sini
itsho
Saya menggunakan .NET 4.5.x dan tidak disertakan. Tapi, kemudian saya tidak menggunakan MVC. Aplikasi ini adalah aplikasi konsol tanpa UI yang akan dijalankan sebagai tugas cron sekali sehari. Saya hanya ingin menggunakan DataAnnotations di kelas yang mewakili anggota data yang akan menyimpan data dari kolom yang saya ambil dari setiap baris tabel SQL Server. Saya akan mencoba menambahkannya secara manual sebagai referensi.
MiddleAgedMutantNinjaProgrammer
Coba lihat itu; di sini
pengguna2090762
@ user2090762: namespace ada, tapi belum semua kelas ada. Khususnya EmailAddressAttribute tidak tersedia hingga 4,5.
jmoreno
2

Saya menemukan bahwa saya tidak dapat merujuk System.ComponentModel.DataAnnotations dari Silverlight 5 dengan versi di bawah ini pada (1). Saya menemukan bahwa rakitan Silverlight 5 tidak dapat menggunakan rakitan .NET, ini memberikan kesalahan "Anda tidak dapat menambahkan referensi ke System.ComponentModel.DataAnnotations karena tidak dibangun terhadap runtime Silverlight. ..." Saya berencana untuk mengatasinya dengan semoga menginstal paket Silverlight 5 yang ada di (2) di bawah ini. Jika gagal saya akan memperbarui posting ini.

[UPDATE: gagal. Saya menginstal semua yang berkaitan dengan Silverlight 5 dan saya tidak memiliki versi Silverlight dari perakitan System.ComponentModel.DataAnnotations .dll. Sangat buruk. PEMBARUAN II: Saya menemukan .dll lama memiliki nama ini dari penginstalan sebelumnya dari kit pengembang Silverlight untuk Visual Studio 2008 atau 2010. Saya menambahkan file ini dan tampaknya 'berfungsi', di IntelliSense sekarang mengenali atribut pada anggota kelas, seperti [Display(Name = "My Property Name")]. Apakah ini berfungsi untuk semua hal lain dalam .dll ini, saya tidak tahu.]

(1)

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

Versi Terpasang: Profesional

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

PaulDesember
sumber
Perbarui III - Saya tidak bisa mendapatkan System.ComponentModel.DataAnnotations.dll untuk bekerja di sisi klien, untuk Silverlight 5, tetapi anehnya di sisi server proyek Silverlight menggunakan versi .NET v4.5.1 ini .dll baik-baik saja. Tetapi sisi klien tidak akan menerima versi .NET, dan menuntut versi Silverlight dari .dll ini, yang pada tanggal ini saya tidak dapat menemukan di mana pun. Jadi Anda harus melakukannya tanpa di sisi klien.
PaulDesember
1

Saya mencari bantuan tentang topik ini ketika saya menemukan masalah yang sama.

Meskipun yang berikut ini mungkin bukan Jawaban untuk pertanyaan yang awalnya diajukan pada tahun 2012, ini mungkin solusi bagi mereka yang menemukan utas ini.

Cara untuk mengatasinya adalah dengan memeriksa di mana proyek Anda berada dalam solusi. Ternyata untuk contoh saya (saya mencoba menginstal paket NuGet tetapi tidak berhasil dan kesalahan yang tercantum muncul) bahwa file proyek saya tidak termasuk dalam direktori solusi meskipun ditampilkan di penjelajah solusi. Saya menghapus proyek dari direktori di luar ruang lingkup dan menambahkan kembali proyek tetapi kali ini dalam lokasi yang benar.

Guybrush Threepwood
sumber
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 .
Ankit Agrawal
sumber
0

Jika Anda mencoba memperbarui studio visual dari vs2008 ke vs2010. Dan aplikasi Anda menggunakan framework 3.5 (dan Anda tidak ingin memutakhirkannya), dan juga menggunakan Layanan WCF RIA BETA ... Saya punya berita buruk ... Anda HARUS meningkatkan ke Layanan WCF RIA v1 (BETA tidak berfungsi pada vs2010 ) ... dan karena ini ... Anda juga harus menginstal Silverlight 4 + upgrade ke framework 4.0

Lihat ini: http://blog.nappisite.com/2010/05/updating-visual-studio-2008net-35-ria.html

Fernando Torres
sumber
0

Saya meningkatkan dari Silverlight 4 ke Silverlight 5 dan kemudian saya mengalami masalah ini. Meskipun saya memiliki referensi ke "System.ComponentModel.DataAnnotations" di bawah "Referensi" dalam proyek saya, itu memiliki tanda hasil kuning yang menunjukkan rakitan yang direferensikan sebelumnya tidak dapat ditemukan. Ternyata properti dari referensi "System.ComponentModel.DataAnnotations" menunjukkan "Versi Spesifik = Benar", ketika saya mengubahnya menjadi "Versi Spesifik = Salah" itu memperbaiki masalah. Klik kanan pada rakitan "System.ComponentModel.DataAnnotations" di bawah "Referensi" dan pilih "Properti" dari menu konteks. Periksa bahwa nilai properti untuk "Versi Spesifik = Salah".

Itu pasti mengacu pada rakitan Silverlight 4 lama yang tidak lagi tersedia setelah peningkatan ke Silverlight 5.

cesiumdeth
sumber
0

System.ComponentModel.DataAnnotations terdapat dalam rakitannya sendiri sehingga Anda perlu memastikan bahwa Anda telah merujuknya. Sederhananya:

1). Klik kanan pada Soloution dan pilih tambahkan.

2). Pilih referensi dari daftar.

3). Cari "System.ComponentModel.DataAnnotation" dan centang kotak di sebelah kiri dan tekan ok.

Pekerjaan selesai, seharusnya tidak ada kesalahan referensi apa pun.

whatdoyouNeedFromMe
sumber
0

Saya juga punya masalah ini. Itu sangat bodoh ketika saya menambahkan namespace yang sama dengan Sistem. Saya mencoba untuk menghapus semua referensi, tetapi tidak terselesaikan. Saya menggunakan "global :: System.ComponentModel", ini bekerja dengan baik. Ketika saya menghapus namespace saya, masalah ini telah teratasi.

Henry
sumber
-6

Saya memiliki masalah yang sama, saya menyelesaikan masalah ini dengan cara berikut.

Klik kanan pada halaman, pilih Properti. dalam membangun tindakan pilih Konten.

Semoga solusi ini dapat membantu Anda.

Pankil Agrawal
sumber
"Halaman" mana yang Anda maksud? Dan bagaimana tepatnya hal itu membantu?
Crono
1
Ini benar-benar salah. Jika Anda membuat elemen proyek diperlakukan sebagai "Konten" selama pembuatan, perilakunya akan hilang. Jadi jika Anda melakukannya di kelas, itu tidak akan dikompilasi lagi dan kodenya tidak akan pernah dipanggil. Sebaliknya itu akan disalin sebagai file di sepanjang binari keluaran kompilasi program. Itulah mengapa Anda akan berhenti menerima kesalahan kompilasi, tetapi ini jelas bukan solusi untuk masalah kompilasi.
Ivaylo Slavov