未找到 EF6 方法 set_SqlServerTypesAssemblyNames

EF6 Method not found set_SqlServerTypesAssemblyNames

我在将控制台应用程序部署到服务器上时遇到困难。

我正在使用 EF6 (6.3.0) 和 SqlServerTypes 14 (14.0.1016.290) 并在按照建议进行任何空间调用之前进行初始化

SqlProviderServices.SqlServerTypesAssemblyName = Assembly.GetAssembly(typeof(Microsoft.SqlServer.Types.SqlGeography)).FullName; //"Microsoft.SqlServer.Types, Version=14.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91";
SqlServerTypes.Utilities.LoadNativeAssemblies(AppDomain.CurrentDomain.BaseDirectory);

然而在setter行,抛出如下错误

System.MissingMethodException: Method not found: 'Void System.Data.Entity.SqlServer.SqlProviderServices.set_SqlServerTypesAssemblyName(System.String)'.

我已确保 SqlServerTypes dll 存在于 bin 目录中。

我读到 EF6 最多只支持 SqlServerTypes 11,我试过了,但运气不好。

应用程序在本地运行良好。

编辑:我现在已经在服务器上安装了 SQL 服务器系统 CLR 类型,但没有用。

当您的开发运行时和部署环境在 GAC 中安装了不同版本的包并且并非所有来自开发环境的 dll 都被复制到部署环境中时,可能会发生此错误(以及其他类似错误)。

这个问题有可能有用的指导:EntityFramework.SqlServer.dll not is getting added to the published folder only when I publish in RELEASE mode

  • 我的首选解决方法是遵循 this advice and make a code reference 到 class 或您依赖的每个 DLL 中的函数 'trick' visual studio 将 dll 包含在如果该程序集不可用,则默认输出 AND 以强制编译时错误(在通过注入使用 DLL 的情况下很有用)。

如果您不知道哪个 dll 可能是原因并且应用程序在开发中运行良好,那么一个简单的修复可以是将 ALL 引用标记为 Copy Local = True :

然后,如果可行,您可以从输出中删除您认为不需要的 DLL,反复测试应用程序是否仍在运行,直到找到需要部署的最小 dll 集