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 REFFERENCE所以这是旧的,不相关的解决方案,现在一些其他重要的类人失踪。
更新(消歧):两个System.ComponentModel.DataAnnotations.dll
和EntityFramework.dll
包括System.ComponentModel.DataAnnotations.MaxLengthAttribute
。 的问题是,每个DLL还包括其它类是EF代码优先的设计是至关重要的。 例如:
EntityFramework.dll:
- System.Data.Entity.DbModelBuilder
System.ComponentModel.DataAnnotations.dll:
- System.ComponentModel.DataAnnotations.RegularExpressionAttribute
加入本声明顶部类的
using System.ComponentModel.DataAnnotations;
System.ComponentModel.DataAnnotations
命名空间跨越distibuted EntityFramework.dll
和System.ComponontModel.DataAnnotations.dll
。 所以,你需要参考您的项目中利用DataAnnotations的同时添加到这一点。
所述MaxLenth属性存在于EntityFramework.dll
。 因此,请确保你在你的项目引用部分,其参考的是目前的dll。
编辑:作为.NET框架4.5,这个命名空间移动到System.ComponentModel.DataAnnotations.dll
。 所以,如果你使用的.NET Framework 4.5与实体框架4.3.1或更少,您将在运行到这个冲突。 解决的办法是,如果你想继续使用.NET 4.5或降级到.NET 4中使用的EntityFramework 4.3.1切换到实体框架1.50的β/ 2版本。
从MSDN单证。
与实体框架5.0 Beta 1版本开始,EntityFramework.dll不包含数据注解的定义。 这些定义被转移到System.ComponentModel.DataAnnotations.dll并在System.ComponentModel.DataAnnotations.Schema命名空间中定义。
我没有升级项目中使用EF5,或降级构建机器.Net框架4的选项。
还有就是要解决这个问题,虽然办法! 事实证明,当你安装Visual Studio 2012它增加了以下文件夹(其中包括)。
C:\ Program Files文件\参考大会\微软\框架\ .NETFramework \ V4.0
在VS,如果你打开一个项目靶向4.0,看看你的参考,以System.ComponentModel.DataAnnotations属性,你会看到路径指着上面的位置,而不是GAC。
此文件夹包含原始框架4.0的组件。 如果现在他们的机器,那么MSBuild的等,在建设项目目标4.0将参考这些,而不是修改那些4.5付诸GAC中。
在我们的情况下,这意味着我们可以通过从dev的机器复制该文件夹与VS安装达在同一个位置我们构建服务器解决问题。 (注:我们只需要这个文件夹复制,没有必要到构建服务器上安装VS)。
更多资讯: http://marcgravell.blogspot.co.uk/2012/09/iterator-blocks-missing-methods-and-net.html
希望这可以帮助别人!