我正在使用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机器上没有收到冲突。
非常感谢
答案 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也可以。