เหตุใดฉันจึงไม่สามารถอ้างอิง System.ComponentModel.DataAnnotations


100

ฉันพยายามใช้ DataAnnotations ในโปรเจ็กต์ WPF ของฉันเพื่อระบุความยาวสูงสุดของสตริงดังต่อไปนี้:

using System.ComponentModel.DataAnnotations;

อย่างไรก็ตามฉันได้รับข้อผิดพลาด

ชนิดหรือชื่อเนมสเปซ 'DataAnnotations' ไม่มีอยู่ในเนมสเปซ 'System.ComponentModel' (คุณไม่มีการอ้างอิงแอสเซมบลีหรือไม่)

ผมเคยเห็นตัวอย่างอื่น ๆ ที่DataAnnotations ไม่อยู่ใน namespace นี้ ฉันใช้ C # 4 มีเหตุผลใดบ้างที่ฉันไม่สามารถใช้สิ่งนี้ได้? ฉันจะแก้ไขอะไรได้บ้าง


คุณติดตั้ง MVC แล้วหรือยัง? ฉันเชื่อว่า DataAnnotations เป็นของแพ็คเกจนั้น
dougajmcdonald

3
บางทีคุณอาจ "ไม่มีข้อมูลอ้างอิงการประกอบ"
phoog

1
ข้อความแสดงข้อผิดพลาดได้รับการออกแบบมาเพื่อเป็นประโยชน์ซึ่งไม่ควรละเลย
Kendall Frey

6
โอเคพวกเขายกโทษให้ฉันที่ดูเหมือนว่าไม่รู้ แต่ฉันกำลังอ้างถึงการชุมนุมSystem.ComponentModelและใช้ส่วนประกอบอื่น ๆ ในนั้น ตาม @Hari ด้านล่างปรากฏว่าDataAnnotationsมีอยู่ในชุดประกอบของตัวเอง ฉันคิดว่ามันจะมีอยู่ภายในSystem.ComponentModelเพราะมันอยู่ในเนมสเปซเดียวกัน
DaveDev

คำตอบ:


157

คุณต้องอ้างอิงแอสเซมบลีที่กำหนดเนมสเปซนี้ (ไม่ได้อ้างอิงโดยค่าเริ่มต้นในเทมเพลต Visual Studio) เปิดตัวจัดการการอ้างอิงของคุณและเพิ่มการอ้างอิงไปยังแอสเซมบลี System.ComponentModel.DataAnnotations (Solution explorer -> Add reference -> Select .Net tab -> เลือก System.ComponentModel.DataAnnotations จากรายการ)


10
สิ่งที่แปลกตรงนี้คือ VS ไม่สามารถให้ 'Potential Fix' แบบปกติกับฉันได้ สงสัยว่าทำไม ...
Todd Vance

ใน VS2019 ไม่มีแท็บ. net (อีกต่อไป) ตรวจสอบคำตอบล่าสุดของ JohnB ซึ่งใช้ได้ผลสำหรับฉัน!
peter.cyc

23

หากใช้. NET Coreหรือ. NET Standard

ใช้:

จัดการ NuGet Packages ..

ใช้จัดการแพ็คเกจ NuGet

แทน:

เพิ่มข้อมูลอ้างอิง ...

อย่าใช้เพิ่มการอ้างอิง


5
จากบรรทัดคำสั่งdotnet add package System.ComponentModel.Annotations
Eric

ผ่านการติดตั้ง nuget package manager ใน VSCode, - -> ตามด้วยคำสั่ง "command + shift + p" (บน mac) - -> แล้วพิมพ์ "Nuget Package manager" แล้วเลือก "add package" จากรายการที่เติมอัตโนมัติ - - > และพิมพ์ System .. และรอให้การเติมข้อความอัตโนมัติแสดงแพ็กเกจที่ถูกต้องและเลือก "System.ComponentModel.Annotations" - -> และเลือกโปรเจ็กต์ที่จะต้องรวมแอสเซมบลีนี้ - -> และเลือก "restore" หากต้องการ สร้างข้อมูลอ้างอิง
supi

13

ไปยัง Reference System.ComponentModel.DataAnnotations

ในไฟล์โค้ดจะมี Using System.ComponentModel.DataAnnotations; ที่ด้านบนของไฟล์เช่น:

using System.ComponentModel.DataAnnotations;

เพิ่มการอ้างอิง. NET ไปยังโครงการของคุณโดยคลิกขวาที่โปรเจ็กต์ในตัวสำรวจโซลูชัน:

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

หวังว่านี่จะช่วยได้! คำถามนี้ช่วยฉันได้


8

หากคุณไม่มีในข้อมูลอ้างอิง (เหมือนที่ฉันไม่มี) คุณยังสามารถเพิ่ม NuGet System.ComponentModel.Annotations เพื่อรับแอสเซมบลีและแก้ไขข้อผิดพลาด (เพิ่มที่นี่เนื่องจากคำตอบนี้ยังอยู่ในอันดับต้น ๆ ของ Google สำหรับข้อผิดพลาด)


4

ฉันมีปัญหาเดียวกันเช่นกันและฉันแก้ไขโดยการเพิ่มการอ้างอิงในหนึ่งในโครงการของฉันซึ่งไม่มีการอ้างอิงดังกล่าว หากคุณมี 2-3 โปรเจ็กต์ในโซลูชันของคุณให้ตรวจสอบโดยเพิ่มการอ้างอิงนี้ในโปรเจ็กต์อื่น ๆ


2

ใช้ FrameWork เวอร์ชัน 4.5 ขึ้นไปสำหรับโครงการของคุณจากนั้นแก้ไขปัญหาได้เนื่องจากเนมสเปซนี้อยู่ภายใต้ 4.5 ขึ้นไป


1
ไม่ถูกต้อง ดูที่นี่
itsho

ฉันใช้. NET 4.5.x และไม่รวมอยู่ด้วย แต่ฉันไม่ได้ใช้ MVC แอปนี้เป็นแอปคอนโซลที่ไม่มี UI ที่จะทำงานเป็น cron วันละครั้ง ฉันต้องการใช้ DataAnnotations ในคลาสที่เป็นตัวแทนของสมาชิกข้อมูลที่จะเก็บข้อมูลจากคอลัมน์ที่ฉันดึงมาจากแถวตาราง SQL Server แต่ละแถว ฉันจะลองเพิ่มด้วยตนเองเป็นข้อมูลอ้างอิง
MiddleAgedMutantNinjaProgrammer

ดูมัน; ที่นี่
user2090762

@ user2090762: มีเนมสเปซอยู่ แต่ยังไม่มีคลาสทั้งหมด โดยเฉพาะอย่างยิ่ง EmailAddressAttribute จะไม่พร้อมใช้งานจนถึง 4.5
jmoreno

2

ฉันพบว่าฉันไม่สามารถอ้างอิง System.ComponentModel.DataAnnotations จาก Silverlight 5 ด้วยเวอร์ชันด้านล่างที่ (1) ฉันพบว่าแอสเซมบลี Silverlight 5 ไม่สามารถใช้. หวังว่าจะติดตั้งแพ็คเกจ Silverlight 5 ได้ที่ (2) ด้านล่าง หากล้มเหลวฉันจะอัปเดตโพสต์นี้

[UPDATE: ล้มเหลว ฉันติดตั้งทุกอย่างที่เกี่ยวข้องกับ Silverlight 5 และฉันไม่มีเวอร์ชัน Silverlight ของระบบประกอบ. dll.ComponentModel.DataAnnotations เลวร้ายเกินไป. UPDATE II: ฉันพบ. dll เก่าที่มีชื่อนี้จากการติดตั้งชุดก่อนหน้าของนักพัฒนา Silverlight สำหรับ Visual Studio 2008 หรือ 2010 ฉันเพิ่มไฟล์นี้และดูเหมือนว่าจะ 'ทำงาน' ในขณะนี้ IntelliSense กำลังรับรู้แอตทริบิวต์ของสมาชิกชั้นเรียน เช่น [Display(Name = "My Property Name")]. ว่าสิ่งนี้ใช้ได้กับทุกอย่างในนี้หรือไม่. dll ฉันไม่รู้]

(1)

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

เวอร์ชันที่ติดตั้ง: มืออาชีพ

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


อัปเดต III - ฉันไม่สามารถรับ System.ComponentModel.DataAnnotations.dll เพื่อทำงานในฝั่งไคลเอ็นต์สำหรับ Silverlight 5 แต่แปลกที่ฝั่งเซิร์ฟเวอร์โครงการ Silverlight ใช้เวอร์ชัน. NET v4.5.1 ของ. dll นี้ได้ดี แต่ฝั่งไคลเอ็นต์จะไม่ยอมรับเวอร์ชัน. NET และต้องการรุ่น Silverlight ของ. dll นี้ซึ่ง ณ วันนี้ฉันไม่พบที่ไหน ดังนั้นคุณต้องทำโดยไม่มีฝั่งไคลเอ็นต์
PaulDe December

1

ฉันค้นหาความช่วยเหลือเกี่ยวกับหัวข้อนี้เนื่องจากพบปัญหาเดียวกัน

แม้ว่าสิ่งต่อไปนี้อาจไม่ใช่คำตอบสำหรับคำถามที่ถาม แต่แรกในปี 2012 แต่ก็อาจเป็นทางออกสำหรับผู้ที่เจอกระทู้นี้

วิธีแก้ปัญหานี้คือตรวจสอบว่าโครงการของคุณอยู่ที่ใดในโซลูชัน ปรากฎว่าอินสแตนซ์ของฉัน (ฉันพยายามติดตั้งแพ็คเกจ NuGet แต่มันไม่ได้และเกิดข้อผิดพลาดในรายการ) ว่าไฟล์โปรเจ็กต์ของฉันไม่ได้รวมอยู่ในไดเร็กทอรีโซลูชันแม้ว่าจะแสดงในโซลูชันเอ็กซ์พลอเรอร์ ฉันลบโปรเจ็กต์ออกจากไดเร็กทอรีนอกขอบเขตและเพิ่มโปรเจ็กต์อีกครั้ง แต่คราวนี้อยู่ในตำแหน่งที่ถูกต้อง


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

หากคุณพยายามอัปเดต Visual Studio จาก vs2008 เป็น vs2010 และแอปของคุณใช้เฟรมเวิร์ก 3.5 (และคุณไม่ต้องการอัปเกรด) และยังใช้ WCF RIA Services BETA ... ฉันมีข่าวร้าย ... คุณต้องอัปเกรดเป็น WCF RIA Services v1 (BETA ไม่ทำงานบน vs2010 ) ... และด้วยเหตุนี้ ... คุณจึงต้องติดตั้ง Silverlight 4 + อัพเกรดเป็นกรอบ 4.0

ดูสิ่งนี้: http://blog.nappisite.com/2010/05/updating-visual-studio-2008net-35-ria.html


0

ฉันอัปเกรดจาก Silverlight 4 เป็น Silverlight 5 แล้วฉันก็มีปัญหานี้ แม้ว่าฉันจะมีการอ้างอิงถึง "System.ComponentModel.DataAnnotations" ภายใต้ "การอ้างอิง" ในโครงการของฉัน แต่ก็มีเครื่องหมายผลตอบแทนสีเหลืองซึ่งระบุว่าไม่พบแอสเซมบลีที่อ้างถึงก่อนหน้านี้ ปรากฎว่าคุณสมบัติของการอ้างอิง "System.ComponentModel.DataAnnotations" ระบุ "เวอร์ชันเฉพาะ = True" เมื่อฉันเปลี่ยนสิ่งนี้เป็น "เวอร์ชันเฉพาะ = False" ก็แก้ไขปัญหาได้ คลิกขวาที่ชุดประกอบ "System.ComponentModel.DataAnnotations" ภายใต้ "References" และเลือก "Properties" จากเมนูบริบท ตรวจสอบว่าค่าคุณสมบัติสำหรับ "เวอร์ชันเฉพาะ = False"

ต้องมีการอ้างอิงชุดประกอบ Silverlight 4 รุ่นเก่าซึ่งไม่สามารถใช้งานได้อีกต่อไปหลังจากอัปเกรดเป็น Silverlight 5


0

System.ComponentModel.DataAnnotations มีอยู่ในแอสเซมบลีของตัวเองดังนั้นคุณต้องแน่ใจว่าคุณได้อ้างอิง เพียงแค่:

1). คลิกขวาที่ Soloution แล้วเลือกเพิ่ม

2). เลือกการอ้างอิงจากรายการ

3). ค้นหา "System.ComponentModel.DataAnnotation" และติ๊กช่องทำเครื่องหมายทางด้านซ้ายมือแล้วกด ok

งานเสร็จแล้วไม่ควรมีข้อผิดพลาดในการอ้างอิง


0

ฉันก็มีปัญหานี้เช่นกัน มันโง่มากเมื่อฉันเพิ่มเนมสเปซเดียวกันกับ System ฉันพยายามลบข้อมูลอ้างอิงทั้งหมด แต่ไม่ได้รับการแก้ไข ฉันใช้ "global :: System.ComponentModel" ก็ใช้งานได้เช่นกัน เมื่อฉันลบเนมสเปซของฉันปัญหานี้ได้รับการแก้ไขแล้ว


-6

ฉันมีปัญหาเดียวกันฉันแก้ไขปัญหานี้โดยทำตามวิธี

คลิกขวาที่หน้าเลือกคุณสมบัติ ในการดำเนินการสร้างเลือกเนื้อหา

หวังว่าโซลูชันนี้อาจช่วยคุณได้


คุณหมายถึง "เพจ" ใด และวิธีนี้ช่วยได้อย่างไร?
Crono

1
นี่มันผิดจริงๆ หากคุณทำให้องค์ประกอบของโครงการถือว่าเป็น "เนื้อหา" ในระหว่างการสร้างองค์ประกอบนั้นจะสูญเสียลักษณะการทำงาน ดังนั้นหากคุณทำในชั้นเรียนจะไม่มีการคอมไพล์อีกต่อไปและจะไม่มีการเรียกรหัส แต่จะถูกคัดลอกเป็นไฟล์ตามไบนารีของเอาต์พุตการคอมไพล์โปรแกรม นั่นคือเหตุผลที่คุณจะหยุดรับข้อผิดพลาดในการคอมไพล์ แต่ไม่ใช่วิธีแก้ปัญหาการคอมไพล์อย่างแน่นอน
Ivaylo Slavov
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.