架构名称空间冲突

本文关键字:空间 冲突 | 更新日期: 2023-09-27 17:54:29

我使用MVC 4, .net 4和实体框架6。我的项目正在我的开发机器上构建,安装了Visual Studio 2010,但在我的构建服务器上,我得到一个命名空间冲突…

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

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

多谢

架构名称空间冲突

问题

。.NET 4.0真的不应该包括System.ComponentModel.DataAnnotations.Schema,所以你会得到一个引用冲突有点令人困惑,但显然。NET 4.5覆盖4.0程序集。

你可以在Marc Gravell的这篇文章中找到更多信息,他说:

事实1:在GAC中,4.5是在4.0之上的一个over- top安装;一旦安装了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也会工作。

另外,请参阅堆栈溢出答案