.NET代码跨机器迁移后编译失败:Schema命名空间不存在
问题原因分析
以下是可能导致该编译错误的几个原因:
.NET Framework 4.0原生DLL不含Schema命名空间
System.ComponentModel.DataAnnotations.Schema命名空间是从.NET Framework 4.5才正式加入的,.NET 4.0原生的System.ComponentModel.DataAnnotations.dll里根本没有这个子命名空间。旧机器能正常编译,大概率是该机器上v4.0路径下的DLL被替换成了更高版本(比如.NET4.5+)的文件,而新机器上的是原生.NET4.0的DLL,所以找不到Schema命名空间。项目实际引用的DLL不一致
虽然两台机器显示引用的是同一路径的DLL,但旧机器的项目可能实际加载的是其他位置的高版本DLL:比如通过NuGet安装的System.ComponentModel.DataAnnotations包,或者全局程序集缓存(GAC)中的高版本组件,只是项目引用路径显示的是v4.0的目录。新机器没有这些额外的引用,实际使用的是原生v4.0的DLL,因此报错。项目配置的隐性差异
旧机器的项目可能开启了AutoGenerateBindingRedirects配置,会自动将程序集引用重定向到更高版本的DLL;而新机器的项目没有这个配置,导致编译时严格使用.NET4.0原生的DLL,从而找不到Schema命名空间。
内容的提问来源于stack exchange,提问作者Frank Martin
相关产品推荐
相关产品推荐

