ChatGPT解决这个技术问题 Extra ChatGPT

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

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

using System.ComponentModel.DataAnnotations;

但是,我得到了错误

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

我见过其他示例,其中DataAnnotations 确实 存在于此命名空间中。我正在使用 C#4。我有什么理由不能使用它吗?我能做些什么来修复它?

你有安装MVC吗?我相信 DataAnnotations 属于那个包
也许您“缺少程序集引用”。
错误消息旨在提供帮助,而不是被忽略。
好的,请原谅我显得无知,但我引用了程序集 System.ComponentModel 并在其中使用了各种其他组件。根据下面的@Hari,似乎 DataAnnotations 存在于它自己的程序集中。我认为它会存在于 System.ComponentModel 中,因为它位于同一个命名空间中。

J
Joseph Gabriel

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


奇怪的是,VS 无法为我提供正常的“潜在修复”。想知道为什么...
在 VS2019 中,.net 选项卡不存在(不再存在)。检查 JohnB 对我有用的最新答案!
在 VS 2017 中,我通过右键单击项目 > 添加 > 参考 > 程序集选项卡 > System.ComponentModel.DataAnnotations 复选框找到它
J
JohnB

如果使用 .NET Core 或 .NET Standard

利用:

管理 NuGet 包..

https://i.stack.imgur.com/h0Fnr.png

代替:

添加参考...

https://i.stack.imgur.com/yJjql.png


从命令行 dotnet add package System.ComponentModel.Annotations
也可以通过在 VSCode 中安装 nuget 包管理器,--> 后跟命令“command+shift+p”(在 Mac 上)--> 并输入“Nuget 包管理器”并从自动完成列表中选择“添加包”-- > 并输入 System.. 并等待自动完成以显示正确的包并选择“System.ComponentModel.Annotations” - - > 并选择需要包含此程序集的项目 - - > 并在需要时选择“恢复”建立参考。
C
Catto

引用 System.ComponentModel.DataAnnotations

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

using System.ComponentModel.DataAnnotations;

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

https://i.stack.imgur.com/a1zj5.png

希望这可以帮助!这个问题帮助了我。


R
Rodger

如果您在引用中没有它(就像我没有),您还可以添加 NuGet System.ComponentModel.Annotations 以获取程序集并解决错误。 (在这里添加它,因为这个答案仍然是谷歌的错误)


A
Ashish Sahu

我也遇到了同样的问题,我通过在我的一个项目中添加引用来解决,该项目没有提到的引用。如果您的解决方案中有 2-3 个项目,请通过将此引用添加到其他项目来进行检查。


E
Edi G.

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

[更新:失败了。我安装了与 Silverlight 5 相关的所有内容,但没有 .dll 程序集 System.ComponentModel.DataAnnotations 的 Silverlight 版本。太糟糕了。更新二:我从以前安装的用于 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 版本,截至目前我在任何地方都找不到。所以你必须在客户端没有。
G
Guybrush Threepwood

当我遇到同样的问题时,我搜索了有关此主题的帮助。

尽管以下可能不是 2012 年最初提出的问题的答案,但对于遇到此线程的人来说,它可能是一个解决方案。

解决此问题的一种方法是检查您的项目在解决方案中的位置。事实证明,对于我的实例(我试图安装 NuGet 包但它不会并且出现列出的错误)我的项目文件未包含在解决方案目录中,尽管显示在解决方案资源管理器中。我从超出范围的目录中删除了项目并重新添加了项目,但这次是在正确的位置。


u
user2090762

为您的项目使用 4.5 及更高版本的 FrameWork 即可解决问题。因为此命名空间低于 4.5 及更高版本。


这是不正确的。见here
我使用的是 .NET 4.5.x,它不包括在内。但是,我没有使用 MVC。此应用程序是一个没有 UI 的控制台应用程序,每天将作为 cron 作业运行一次。我只想在代表数据成员的类中使用 DataAnnotations,这些数据成员将保存我从每个 SQL Server 表行中检索的列中的数据。我会尝试手动添加它作为参考。
看看它;here
@user2090762:命名空间存在,但并非所有类都存在。特别是 EmailAddressAttribute 直到 4.5 才可用。
w
whatdoyouNeedFromMe

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

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

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

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

工作完成,不应该有任何参考错误。


A
Ankit Agrawal
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 .

Ḟḹáḿíṅḡ Ⱬỏḿƀíé

如果您尝试将 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


c
cesiumdeth

我从 Silverlight 4 升级到 Silverlight 5,然后我遇到了这个问题。虽然我在我的项目中的“参考”下有对“System.ComponentModel.DataAnnotations”的参考,但它有一个黄色的让步标志,表明无法找到先前引用的程序集。事实证明,“System.ComponentModel.DataAnnotations”引用的属性指示“特定版本 = True”,当我将其更改为“特定版本 = False”时,它解决了这个问题。右键单击“References”下的“System.ComponentModel.DataAnnotations”程序集,然后从上下文菜单中选择“Properties”。检查“特定版本 = False”的属性值。

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


H
Henry

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


d
dosnetCore

对于 Visual Studio 2019 中的 .Net Core,试试这个。 see VS suggestion

它对我有用,希望它也对你有用。


I
Ivan Silkin

在 net40 中使用 System.ComponentModel.DataAnnotation 时出现问题,所以我这样做了:

#if !NET40
    using System.ComponentModel.DataAnnotations;
#endif

#if !NET40
        [StringLength(256)]
#endif

NET40 必须是 .Net Framework 4.0 的预定义宏定义


a
alamoot

我正在从 .Net Framework 4.7.2 迁移到 .Net Standard 2.0。

就我而言,我必须将 DataAnnotations 的引用从 Assembly 引用更改为 Nuget 包。


P
Pankil Agrawal

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

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

希望这个解决方案可以帮助你。


您指的是哪个“页面”?这到底有什么帮助?
好吧,这确实是错误的。如果您在构建期间将项目元素视为“内容”,它将失去其行为。因此,如果您在一个类上执行此操作,它将不再被编译,并且它的代码将永远不会被调用。相反,它将作为文件沿着程序编译输出的二进制文件复制。这就是为什么您将停止接收编译错误,但这绝对不是编译问题的解决方案。