Почему я не могу ссылаться на System.ComponentModel.DataAnnotations?

100

Я пытаюсь использовать DataAnnotations в своем проекте WPF, чтобы указать максимальную длину строк со следующим:

using System.ComponentModel.DataAnnotations;

Однако я получаю сообщение об ошибке

Имя типа или пространства имен DataAnnotations не существует в пространстве имен System.ComponentModel (отсутствует ссылка на сборку?)

Я видел другие примеры, когда DataAnnotations они существуют в этом пространстве имен. Я использую C # 4. Есть ли причина, по которой я не могу это использовать? Что я могу сделать, чтобы это исправить?

ДэйвДев
источник
У вас установлен MVC? Я считаю, что DataAnnotations принадлежит этому пакету
dougajmcdonald
3
Возможно, вам «не хватает ссылки на сборку».
phoog
1
Сообщения об ошибках призваны быть полезными, а не игнорировать их.
Кендалл Фрей
6
Хорошо, ребята, простите меня за то, что я выгляжу невежественным, но я ссылаюсь на сборку System.ComponentModelи использую в ней различные другие компоненты. Согласно @Hari ниже, похоже, что DataAnnotationsсуществует в своей собственной сборке. Я думал, что он будет существовать внутри, System.ComponentModelпоскольку находится в том же пространстве имен.
DaveDev

Ответы:

157

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

Хари
источник
10
Что здесь странно, так это то, что VS не смогла дать мне нормальное «Возможное исправление» для этого. Интересно, почему ...
Тодд Вэнс
В VS2019 вкладки .net нет (больше). Проверьте более свежий ответ JohnB, который работает для меня!
peter.cyc
23

При использовании .NET Core или .NET Standard

использование:

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

Использование управления пакетами NuGet

вместо того:

Добавить ссылку ...

Не используйте Добавить ссылку

JohnB
источник
5
Из командной строкиdotnet add package System.ComponentModel.Annotations
Эрик
также путем установки диспетчера пакетов nuget в VSCode, - ->, за которым следует команда «command + shift + p» (на Mac) - ->, набрав «Диспетчер пакетов Nuget» и выбрав «добавить пакет» из списка автозаполнения - - > и введите System .. и дождитесь автозаполнения, чтобы отобразить правильный пакет, и выберите "System.ComponentModel.Annotations" - -> и выберите проект, в который эта сборка должна быть включена - -> и выберите "восстановить", если необходимо установить ссылку.
supi
13

Ссылка на 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 и выше.

user2090762
источник
1
это неправильно. см. здесь
itsho
Я использую .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 и требует версию этой библиотеки .dll для Silverlight, которую я нигде не могу найти. Поэтому на стороне клиента вы должны обойтись без него.
Пол
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. И ваше приложение использует framework 3.5 (и вы не хотите его обновлять), а также использовало WCF RIA Services BETA ... У меня плохие новости ... вы ДОЛЖНЫ перейти на WCF RIA Services v1 (BETA не работает на vs2010 ) ... и в связи с этим ... вам также необходимо установить Silverlight 4 + обновление до framework 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", установите флажок слева и нажмите ОК.

Работа выполнена, ошибок ссылок быть не должно.

что тебе нужно от меня
источник
0

У меня тоже такая проблема. Это очень глупо, когда я добавляю пространство имен так же, как и System. Я пытаюсь удалить все ссылки, но это не решается. Я использую global :: System.ComponentModel, он тоже работает. Когда я удаляю свое пространство имен, эта проблема решена.

Генри
источник
-6

У меня была такая же проблема, я решил эту проблему следующим образом.

Щелкните страницу правой кнопкой мыши и выберите «Свойство». в действии сборки выберите Content.

Надеюсь, что это решение может вам помочь.

Панкил Агравал
источник
Какую «страницу» вы имеете в виду? И как это помогает?
Crono
1
Что ж, это действительно неправильно. Если вы сделаете элемент проекта обработанным как «Контент» во время сборки, он потеряет свое поведение. Поэтому, если вы сделаете это в классе, он больше не будет компилироваться и его код никогда не будет вызываться. Вместо этого он будет скопирован как файл вместе с двоичными файлами вывода компиляции программы. Вот почему вы перестанете получать ошибки компиляции, но это определенно не решение проблемы компиляции.
Ивайло Славов