Чому я не можу посилатися на System.ComponentModel.DataAnnotations?


97

Я намагаюся використовувати DataAnnotations у своєму проекті WPF, щоб вказати максимальну довжину рядків із наступним:

using System.ComponentModel.DataAnnotations;

Однак я отримую помилку

Ім'я типу або простору імен 'DataAnnotations' не існує в просторі імен 'System.ComponentModel' (вам не вистачає посилання на збірку?)

Я бачив інші приклади , де DataAnnotations дійсно існує в цьому просторі імен. Я використовую С # 4. Чи є якась причина, чому я не можу цим користуватися? Що я можу зробити, щоб це виправити?


Ви встановили MVC? Я вважаю, що DataAnnotations належить до цього пакету
dougajmcdonald

3
Можливо, ви "пропускаєте посилання на збірку".
phoog

1
Повідомлення про помилки призначені для того, щоб бути корисними, а не ігнорувати.
Кендалл Фрей,

6
Гаразд, хлопці, вибачте мене за те, що я здався невігласом, але я посилаюся на збірку System.ComponentModelта використовую різні інші компоненти. Відповідно до @Hari нижче, схоже, це DataAnnotationsіснує у власній асамблеї. Я думав, що він буде існувати всередині, System.ComponentModelоскільки знаходиться в тому ж просторі імен.
DaveDev

Відповіді:


156

Ви повинні посилатися на збірку, в якій визначено цей простір імен (на нього за замовчуванням не посилаються в шаблонах Visual Studio). Відкрийте диспетчер посилань і додайте посилання на збірку System.ComponentModel.DataAnnotations (Провідник рішень -> Додати посилання -> Виберіть вкладку .Net -> виберіть System.ComponentModel.DataAnnotations зі списку)


10
Дивно тут те, що VS не зміг дати мені нормального "потенційного виправлення" для цього. Дивно, чому ...
Тодд Венс

У VS2019 вкладка .net відсутня (більше). Перевірте найновішу відповідь JohnB, яка працює на мене!
peter.cyc

19

Якщо використовується .NET Core або .NET Standard

використання:

Управління пакетами NuGet ..

Використовуйте Управління пакетами NuGet

замість:

Додати посилання ...

Не використовуйте Додати посилання


5
З командного рядкаdotnet add package System.ComponentModel.Annotations
Ерік

також за допомогою встановлення менеджера пакунків nuget у VSCode, - -> після чого виконується команда "command + shift + p" (на mac) - -> та вводиться "Nuget Package manager" та вибирається "add package" зі списку автозаповнення - - > і набравши в системі .. і чекаючи автозаповнення, щоб показати правильний пакет, і вибравши "System.ComponentModel.Anotations" - -> і вибравши проект, куди потрібно включити цю збірку - -> і вибравши "відновити", якщо потрібно встановити посилання.
supi

13

До посилання System.ComponentModel.DataAnnotations

У файлі коду мати Використання System.ComponentModel.DataAnnotations; у верхній частині файлу, наприклад:

using System.ComponentModel.DataAnnotations;

Додайте посилання .NET на свій проект, клацнувши правою кнопкою миші проект у провіднику рішень:

введіть тут опис зображення

Сподіваюся, це допомагає! Це питання мені допомогло.


8

Якщо у вас його немає в посиланнях (як у мене не було), ви також можете додати NuGet System.ComponentModel.Annotations, щоб отримати збірки та вирішити помилки. (Додавши його сюди, оскільки ця відповідь все ще є вершиною Google за помилку)


4

У мене також була та ж проблема, і я вирішив це, додавши посилання в один зі своїх проектів, який не мав згаданого посилання. Якщо у вашому рішенні є 2-3 проекти, перевірте, додавши це посилання до інших проектів.


2

Використовуйте FrameWork версії 4.5 і вище для свого проекту, тоді проблема вирішена, оскільки цей простір імен не перевищує 4.5 і вище.


1
це неправильно. дивись тут
іто

Я використовую .NET 4.5.x, і він не включений. Але тоді я не використовую MVC. Ця програма є консольною програмою без інтерфейсу, яка запускатиметься як завдання cron раз на день. Я хочу використовувати DataAnnotations лише в класах, які представляють члени даних, які будуть містити дані зі стовпців, які я отримую з кожного рядка таблиці SQL Server. Я спробую додати його вручну як посилання.
MiddleAgedMutantNinjaProgrammer

Погляньте на це; тут
user2090762

@ user2090762: простір імен існує, але ще не всі класи існують. Зокрема, EmailAddressAttribute буде доступний до 4.5.
jmoreno

2

Я виявив, що я не можу посилатися на System.ComponentModel.DataAnnotations з Silverlight 5 з наведеною нижче версією (1). Я виявив, що збірки Silverlight 5 не можуть використовувати .NET-збірки, це видає помилку "Ви не можете додати посилання на System.ComponentModel.DataAnnotations, оскільки вона не була побудована щодо середовища виконання Silverlight. ..." Я планую обійти це шляхом сподіваємось, встановити пакет Silverlight 5, який можна знайти в (2) нижче. Якщо це не вдасться, я оновлю цю публікацію.

[ОНОВЛЕННЯ: не вдалося. Я встановив усе, що стосується Silverlight 5, і у мене немає версії Silverlight збірки .dll System.ComponentModel.DataAnnotations. Шкода. ОНОВЛЕННЯ 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

Встановлена ​​версія: Professional

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


Оновлення III - Я не зміг отримати System.ComponentModel.DataAnnotations.dll для роботи на стороні клієнта для Silverlight 5, але дивно, що на стороні сервера проект Silverlight використовує .NET v4.5.1 версію цієї .dll просто чудово. Але клієнтська сторона не прийме версію .NET і вимагає версію Silverlight цієї .dll, яку станом на цю дату я ніде не можу знайти. Отже, вам потрібно обійтися стороною клієнта.
Paul, грудень

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" вказували на "Specific Version = True", коли я змінив це на "Specific Version = False", це вирішило проблему. Клацніть правою кнопкою миші на збірці "System.ComponentModel.DataAnnotations" у розділі "Посилання" та виберіть "Властивості" у контекстному меню. Переконайтеся, що значення властивості для "Specific Version = False".

Напевно, мова йшла про стару збірку Silverlight 4, яка вже не була доступною після оновлення до Silverlight 5.


0

System.ComponentModel.DataAnnotations міститься у власній збірці, тому вам потрібно переконатися, що у нього є посилання. Просто:

1). Клацніть правою кнопкою миші на Soloution та виберіть Додати.

2). Виберіть посилання зі списку.

3). Знайдіть "System.ComponentModel.DataAnnotation" і встановіть прапорець на лівій стороні та натисніть OK.

Робота виконана, не повинно бути помилок посилання.


0

Я теж маю цю проблему. Це дуже дурно, коли я додаю простір імен так само, як і System. Я намагаюся видалити всі посилання, але це не вирішено. Я використовую "global :: System.ComponentModel", він також працює. Коли я вилучаю свій простір імен, ця проблема була вирішена.


-6

У мене була та ж проблема, я вирішив цю проблему наступним чином.

Клацніть правою кнопкою миші на сторінці, виберіть Властивість. у дії збірки виберіть Вміст.

Сподіваюся, що це рішення може вам допомогти.


На яку «сторінку» ви посилаєтесь? І як це точно допомагає?
Кроно

1
Ну, це насправді неправильно. Якщо ви змусите елемент проекту розглядатися як "Вміст" під час побудови, він втратить свою поведінку. Отже, якщо ви зробите це в класі, він більше не буде компілюватися, і його код ніколи не буде викликатися. Натомість він буде скопійований у вигляді файлу вздовж двійкових файлів результатів компіляції програми. Ось чому ви перестанете отримувати помилки компіляції, але це точно не є рішенням проблеми компіляції.
Івайло Славов
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.