9
 The type 'System.ComponentModel.DataAnnotations.MaxLengthAttribute' 
 exists in both 

 [path...]\packages\EntityFramework.4.3.1\lib\net40\EntityFramework.dll 

 and

'c:\Program Files (x86)\Reference Assemblies\Microsoft\Framework
\.NETFramework\v4.5\System.ComponentModel.DataAnnotations.dll'  

现在,我在 msdn上阅读到排除 EntityFramework 引用(通过 nuget 包添加)是安全的。但是,当我这样做时,我无法正确创建 DBContext,因为 DbModelBuilder 类位于 EntityFramework dll 中。此外,当我删除 EntityFramework 引用时,一些其他关键类丢失了,所以这是旧的和不相关的解决方案。

更新(消歧):两者System.ComponentModel.DataAnnotations.dllEntityFramework.dll 包括System.ComponentModel.DataAnnotations.MaxLengthAttribute。问题是每个 dll 还包含对 EF 代码优先设计至关重要的其他类。例如:

EntityFramework.dll:
 - System.Data.Entity.DbModelBuilder

System.ComponentModel.DataAnnotations.dll:
 - System.ComponentModel.DataAnnotations.RegularExpressionAttribute
4

2 回答 2

15

将此语句添加到您的班级顶部

 using System.ComponentModel.DataAnnotations;

System.ComponentModel.DataAnnotations命名空间分布在EntityFramework.dllandSystem.ComponontModel.DataAnnotations.dll中。因此,您需要在项目中添加对这两者的引用以使用 DataAnnotations。

MaxLenth 属性存在于EntityFramework.dll. 因此,请确保您在项目引用部分中有对该 dll 的引用。

在此处输入图像描述

编辑:从 .NET 框架 4.5 开始,此命名空间已移至System.ComponentModel.DataAnnotations.dll. 因此,如果您将 .NET Framework 4.5 与 Entity Framework 4.3.1 或更低版本一起使用,您将遇到此冲突。如果您想坚持使用 .NET 4.5 或降级到 .NET 4 以使用 EntityFramework 4.3.1,解决方案是切换到 Entity Framework 1.50 beta 1/ 2 版本。

来自msdn文档。

从 Entity Framework 5.0 Beta 1 开始,EntityFramework.dll 不包含数据注释的定义。这些定义已移至 System.ComponentModel.DataAnnotations.dll 并在 System.ComponentModel.DataAnnotations.Schema 命名空间中定义。

于 2012-05-11T13:36:45.900 回答
7

我没有选择升级项目以使用 EF5,或将构建机器降级到 .Net Framework 4。

不过有办法解决这个问题!事实证明,当您安装 Visual Studio 2012 时,它会添加以下文件夹(以及其他文件夹)。

C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0

在 VS 中,如果您打开一个以 4.0 为目标的项目并查看对 System.ComponentModel.DataAnnotations 的引用的属性,您将看到路径指向上述位置,而不是 GAC。

此文件夹包含原始 Framework 4.0 程序集。如果它们存在于机器上,那么 MSBuild 等在构建面向 4.0 的项目时将引用这些,而不是 4.5 放入 GAC 的修改过的那些。

在我们的例子中,这意味着我们可以通过将该文件夹从安装了 VS 的开发机器复制到同一位置的构建服务器来解决问题。(注:我们只需要复制这个文件夹,不需要在构建服务器上安装VS)。

更多信息在这里: http: //marcgravell.blogspot.co.uk/2012/09/iterator-blocks-missing-methods-and-net.html

希望这对其他人有帮助!

于 2013-02-21T08:29:57.617 回答