在仅安装.NET 4.0的服务器部署EF 5.0应用遇方法未找到错误求助
这个问题我之前也碰到过,核心原因很明确:你本地因为装了.NET 4.5,项目引用的是EF 5.0专门针对.NET 4.5编译的版本(也就是EntityFramework.5.0.0\lib\net45下的DLL),但服务器只有.NET 4.0——而UseConsistentNullReferenceBehavior这个属性是.NET 4.5给ObjectContextOptions新增的,.NET 4.0的类库根本没有这个方法,部署后自然会抛出找不到方法的异常。
下面是具体的解决步骤:
替换EF引用为.NET 4.0兼容版本
你需要把项目里的EntityFramework引用换成EF 5.0针对.NET 4.0编译的版本,这个版本在NuGet包的EntityFramework.5.0.0\lib\net40路径下。
操作起来有两种简单方式:- 先确认你的项目目标框架是.NET Framework 4.0(右键项目→属性→应用程序→目标框架),如果之前设的是4.5,改成4.0后,通过NuGet重新安装EF 5.0,NuGet会自动给你装适配.NET 4.0的版本;
- 手动删除现有EntityFramework引用,然后浏览找到
net40目录下的EntityFramework.dll重新添加引用。
检查并调整配置文件
打开项目的App.config(桌面程序)或Web.config(Web程序),确保EF的配置是适配.NET 4.0的:- 确认
entityFramework节点的配置正确,比如:<entityFramework> <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" /> <providers> <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> </providers> </entityFramework> - 如果配置里有
useConsistentNullReferenceBehavior相关的设置,直接删掉就行,.NET 4.0不支持这个配置项。
- 确认
重新编译部署
先清理项目(右键项目→清理),再重新生成解决方案,确保编译没有警告或错误。部署的时候,一定要把net40版本的EntityFramework.dll和EntityFramework.SqlServer.dll(如果用到SQL Server的话)一起复制到服务器的bin目录里,别再带错版本了。
另外提醒一句:EF 5.0在.NET 4.0上是有功能限制的,像异步查询、UseConsistentNullReferenceBehavior这类依赖.NET 4.5的特性都用不了,如果你的代码里写了这些逻辑,还得把代码改掉,保证能在.NET 4.0环境下正常运行。
内容的提问来源于stack exchange,提问作者Nitin S

