为什么我无法引用System.ComponentModel.DataAnnotations?

126

我正在尝试在我的WPF项目中使用DataAnnotations来指定字符串的最大长度,代码如下:

using System.ComponentModel.DataAnnotations;

然而,我遇到了错误:

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

我看到其他示例中DataAnnotations确实存在于这个命名空间中。我正在使用C#4。有什么原因我不能使用它?我该怎么解决?


你安装了MVC吗?我相信DataAnnotations属于那个包。 - dougajmcdonald
3
也许您“缺少程序集引用”。 - phoog
1
错误信息旨在提供帮助,而不是被忽略。 - Kendall Frey
7
大家好,原谅我显得无知,但我正在引用程序集System.ComponentModel并使用其中的各种组件。根据下面@Hari的说法,似乎DataAnnotations存在于它自己的程序集中。我原以为它会存在于System.ComponentModel中,因为它和该命名空间相同。 - DaveDev
18个回答

172

您需要引用该命名空间所定义的程序集(这在Visual Studio模板中默认情况下不会被引用)。打开引用管理器,添加对System.ComponentModel.DataAnnotations程序集的引用(解决方案资源管理器->添加引用->选择.Net选项卡->从列表中选择System.ComponentModel.DataAnnotations)


13
奇怪的是,VS无法给我这个问题提供正常的“潜在解决方法”。不知道为什么... - Todd Vance
在VS2019中,.net选项卡不再存在。 请查看JohnB的最新答案,这对我很有效! - peter.cyc
在VS 2017中,我通过右键单击项目>添加>引用>程序集选项卡>System.ComponentModel.DataAnnotations复选框找到它。 - David Mays
在我的项目中,我没有明确的引用,但它起作用了。然而,在另一个开发者的计算机上却无法工作,所以我不得不明确地在项目中添加引用。为什么会这样? - IngoB

48
如果使用.NET Core.NET Standard,请使用以下方法来管理NuGet包:

管理NuGet程序包..

使用管理NuGet Packages

不要使用以下方法:

添加引用...

不要使用添加引用


7
从命令行执行 dotnet add package System.ComponentModel.Annotations - Eric
1
同时,通过在VSCode中安装Nuget包管理器,- - > 按下“command+shift+p”(在Mac上) - - > 输入“Nuget Package Manager”并从自动完成的列表中选择“添加包” - - > 输入System..并等待自动完成显示正确的包并选择“System.ComponentModel.Annotations” - - > 选择需要包含此程序集的项目 - - > 如果需要建立引用,则选择“还原”。 - supi

13

引用System.ComponentModel.DataAnnotations命名空间

在代码文件的顶部加入Using System.ComponentModel.DataAnnotations;,例如:

using System.ComponentModel.DataAnnotations;

通过在解决方案资源管理器中右键单击项目,向您的项目添加 .NET 引用:

enter image description here

希望这可以帮助您!这个问题对我很有帮助。


8
如果您在引用中没有找到它(就像我一样),您也可以添加NuGet System.ComponentModel.Annotations来获取程序集并解决错误。(将其添加到此处,因为该答案仍然是Google搜索结果的前列)

4

我之前也遇到过同样的问题,解决方法是在一个没有提到该引用的项目中添加该引用。如果您的解决方案中有2-3个项目,请尝试将此引用添加到其他项目中以查看是否可行。


2
我在遇到同样的问题时搜索了帮助。虽然以下内容可能不是2012年最初提出的问题的答案,但对于那些遇到这个线程的人来说可能是一个解决方案。
解决方法是检查您的项目在解决方案中的位置。对于我的情况(我试图安装NuGet包但无法安装,出现了列出的错误),发现我的项目文件没有包含在解决方案目录中,尽管在解决方案资源管理器中显示。我从超出范围的目录中删除了该项目,并重新将项目添加到正确的位置。

2
我发现在Silverlight 5中无法引用System.ComponentModel.DataAnnotations的以下版本。我发现Silverlight 5程序集不能使用.NET程序集,它会给出错误“您无法添加对System.ComponentModel.DataAnnotations的引用,因为它未针对Silverlight运行时构建...” 我计划通过安装下面(2)找到的Silverlight 5软件包来解决此问题。如果失败了,我会更新这篇文章。
[更新:失败了。我安装了与Silverlight 5相关的所有内容,但没有System.ComponentModel.DataAnnotations的Silverlight版本。太糟糕了。更新II:我从以前安装的Visual Studio 2008或2010的Silverlight开发人员工具包中找到了一个旧的.dll文件。我添加了这个文件,现在IntelliSense能够识别类成员上的属性,例如[Display(Name = "My Property Name")].不知道这是否适用于该.dll中的其他所有内容。]
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,在此日期之前我找不到任何版本。因此,您必须在客户端上没有这个库文件。 - PaulDecember

1

使用框架版本4.5及以上版本进行项目,问题将得到解决。因为此命名空间在4.5及以上版本中。


1
那是不正确的。请参见此处 - itsho
我正在使用.NET 4.5.x,但它没有包含在内。但是,我没有使用MVC。这个应用程序是一个没有UI的控制台应用程序,将作为cron作业每天运行一次。我只想在表示从每个SQL Server表行检索的列中保存数据的数据成员的类中使用DataAnnotations。我将尝试手动添加它作为引用。 - MiddleAgedMutantNinjaProgrammer
请查看此链接:这里 - user2090762
@user2090762:命名空间已经存在,但并非所有类都已存在。特别是,EmailAddressAttribute 直到4.5版本才可用。 - jmoreno

1

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

1). 右键单击解决方案,选择添加。

2). 从列表中选择引用。

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

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


0

我从Silverlight 4升级到Silverlight 5,然后遇到了这个问题。虽然在我的项目的“引用”下有一个对“System.ComponentModel.DataAnnotations”的引用,但它旁边有一个黄色的警告标志,表示之前引用的程序集找不到。原来是因为“System.ComponentModel.DataAnnotations”引用的属性中指定了“Specific Version = True”,当我将其改为“Specific Version = False”时,问题就解决了。右键单击“引用”下的“System.ComponentModel.DataAnnotations”程序集,选择上下文菜单中的“属性”。检查“Specific Version”属性值是否为“False”。

在升级到Silverlight 5后,它可能仍然引用着旧的Silverlight 4程序集,而该程序集已不再可用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接