为什么我不能引用System.ComponentModel.DataAnnotations?


97

我正在尝试在WPF项目中使用DataAnnotations来指定字符串的最大长度,并具有以下内容:

using System.ComponentModel.DataAnnotations;

但是,我得到了错误

类型或名称空间名称“ DataAnnotations”在名称空间“ System.ComponentModel”中不存在(您是否缺少程序集引用?)

我看过其他示例,该名称空间中DataAnnotations 确实存在。我正在使用C#4。有什么原因我不能使用这个吗?我该如何解决?


您安装了MVC吗?我相信DataAnnotations属于该软件包
dougajmcdonald 2012年

3
也许您“缺少程序集参考”。
phoog 2012年

1
错误消息旨在帮助您,而不是被忽略。
肯德尔·弗雷

6
好的,请原谅我看起来很愚昧,但是我引用的是程序集,System.ComponentModel并在其中使用了其他各种组件。根据下面的@Hari,它似乎DataAnnotations存在于其自己的程序集中。我以为它会存在于System.ComponentModel同一个命名空间中。
DaveDev 2012年

Answers:


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
Eric

也可以通过在VSCode中安装nuget软件包管理器-->然后是命令“ command + shift + p”(在Mac上)-->并键入“ Nuget软件包管理器”,然后从自动完成的列表中选择“添加软件包”-- >,然后输入System ..,然后等待自动完成以显示正确的包,然后选择“ System.ComponentModel.Annotations”->,然后选择需要包含此程序集的项目->,然后根据需要选择“ restore”建立参考。
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及更高版本。


1
那是不对的。看到这里
itsho 2015年

我正在使用.NET 4.5.x,但不包括在内。但是,那我就没有使用MVC。此应用程序是一个没有UI的控制台应用程序,每天都会作为cron作业运行。我只想在表示数据成员的类中使用DataAnnotations,这些成员将保存从每个SQL Server表行检索的列中的数据。我将尝试手动添加它作为参考。
MiddleAgedMutantNinjaProgrammer


@ user2090762:名称空间存在,但并非所有类都存在。特别是直到4.5之前,EmailAddressAttribute才可用。
jmoreno '17

2

我发现无法使用以下版本的(1)来引用Silverlight 5中的System.ComponentModel.DataAnnotations。我发现Silverlight 5程序集不能使用.NET程序集,它给出错误“您不能添加对System.ComponentModel.DataAnnotations的引用,因为它不是针对Silverlight运行时构建的。...”我计​​划通过以下方法解决此问题希望安装下面(2)处的Silverlight 5软件包。如果失败,我将更新此帖子。

[更新:失败。我安装了与Silverlight 5相关的所有内容,但没有.dll程序集System.ComponentModel.DataAnnotations的Silverlight版本。太糟糕了。更新II:我从以前安装的针对Visual Studio 2008或2010的Silverlight开发人员工具包中找到了一个具有该名称的旧.dll。我添加了此文件,并且看起来“可以正常工作”,因为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-对于Silverlight 5,我无法在客户端使用System.ComponentModel.DataAnnotations.dll,但是奇怪的是,在服务器端,Silverlight项目使用了该.dll的.NET v4.5.1版本。但是客户端将不接受.NET版本,并要求该.dll的Silverlight版本,到目前为止,我在任何地方都找不到。因此,您必须在客户端上做到这一点。
Paul14年12

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

我从Silverlight 4升级到Silverlight 5,然后遇到了这个问题。尽管我在项目的“引用”下引用了“ System.ComponentModel.DataAnnotations”,但是它带有黄色的屈服符号,表示找不到先前引用的程序集。原来,“ System.ComponentModel.DataAnnotations”引用的属性指示为“ Specific Version = True”,当我将其更改为“ Specific Version = False”时,此问题已解决。右键单击“参考”下的“ System.ComponentModel.DataAnnotations”程序集,然后从上下文菜单中选择“属性”。检查“特定版本= False”的属性值。

它一定是在引用旧的Silverlight 4程序集,该程序集在升级到Silverlight 5之后不再可用。


0

System.ComponentModel.DataAnnotations包含在其自己的程序集中,因此您需要确保已引用它。只是简单地:

1)。右键单击Soloution并选择添加。

2)。从列表中选择参考。

3)。搜索“ System.ComponentModel.DataAnnotation”,然后勾选其左侧的复选框,然后按OK。

工作完成,不应有任何引用错误。


0

我也有这个问题。当我添加与System相同的名称空间时,这是非常愚蠢的。我尝试删除所有引用,但无法解决。我使用“ global :: System.ComponentModel”,它也正常工作。当我删除名称空间时,此问题已解决。


-6

我有同样的问题,我通过以下方式解决了这个问题。

右键单击页面,选择属性。在构建操作中,选择内容。

希望此解决方案可以为您提供帮助。


您指的是哪个“页面”?那到底有什么帮助呢?
Crono 2014年

1
好吧,这确实是错误的。如果在构建过程中将项目元素视为“内容”,它将失去其行为。因此,如果您在类上执行此操作,则将不再对其进行编译,并且永远不会调用其代码。而是将其作为文件沿程序编译输出的二进制文件复制。这就是为什么您将停止接收编译错误的原因,但这绝对不是解决编译问题的方法。
Ivaylo Slavov
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.