System.ComponentModel.DataAnnotations.Schema命名空间冲突

时间:2015-06-08 17:51:10

标签: c# .net entity-framework namespaces

我正在使用MVC 4,.net 4和Entity Framework 6.我的项目正在我的dev机器上构建,该机器安装了Visual Studio 2010,但在我的构建服务器上,我得到名称空间冲突......

'd:\ Projects \ tools \ Apps \ LAMS \ packages \ EntityFramework.6.0.2 \ lib \ net40 \ EntityFramework.dll'中存在'System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedAttribute'类型和'c:\ Windows \ Microsoft.NET \ assembly \ GAC_MSIL \ System.ComponentModel.DataAnnotations \ v4.0_4.0.0.0__31bf3856ad364e35 \ System.ComponentModel.DataAnnotations.dll'

我不确定如何解决这个冲突,我不明白为什么我的dev机器上没有收到冲突。

非常感谢

1 个答案:

答案 0 :(得分:0)

问题

.NET 4.0真的不应该包含System.ComponentModel.DataAnnotations.Schema所以有点令人困惑的是你会引起参考冲突,但显然.NET 4.5会覆盖4.0程序集。

您可以在此post by Marc Gravell中找到更多信息:

  

事实1:4.5是GAC中4.0之上的就地过顶安装;一旦安装了4.5,4.0运行4.5程序集

     

事实2:如果你的构建服务器没有引用程序集,它会在GAC中查找 - 所以......一旦你安装了4.5,即使你(在你的项目中)要求4.0,它也会得到4.5

解决方案

在您的开发计算机上,Visual Studio添加了一个用于引用.NET 4.0程序集的不同文件夹,类似于

  

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

您可以将该文件夹复制到您的构建计算机上,它应该可以正常工作,因为MSBuild会在构建面向4.0的项目时引用这些文件夹。

另一方面,由于您在构建计算机上卸载了.NET 4.5,因此可能只需重新安装.NET 4.0也可以。

另请参阅this Stack Overflow answer