You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

EF6部署控制台应用报错:未找到set_SqlServerTypesAssemblyName方法

解决EF6中设置SqlProviderServices.SqlServerTypesAssemblyName时的MissingMethodException问题

这个报错的根源其实很明确:EF6.3.0版本已经移除了SqlProviderServices.set_SqlServerTypesAssemblyName这个方法的setter,你本地运行正常大概率是因为开发环境里有旧版EF相关依赖的缓存,而服务器环境更干净,直接触发了方法找不到的异常。下面是具体的解决步骤:

1. 立即移除过时的赋值代码

把这行代码彻底删掉,它在EF6.3+里已经没有作用了,反而会引发异常:

// 删掉这行!不要保留
SqlProviderServices.SqlServerTypesAssemblyName = Assembly.GetAssembly(typeof(Microsoft.SqlServer.Types.SqlGeography)).FullName;

2. 保留并优化SqlServerTypes的加载逻辑

SqlServerTypes.Utilities.LoadNativeAssemblies这行代码是有效的,但要确保它在EF上下文初始化之前执行,比如放在控制台应用的Main方法最开头:

static void Main(string[] args)
{
    // 优先加载本地部署的SqlServerTypes原生库
    SqlServerTypes.Utilities.LoadNativeAssemblies(AppDomain.CurrentDomain.BaseDirectory);
    
    // 之后再初始化EF上下文、执行数据库操作
    using (var dbContext = new YourDbContext())
    {
        // 你的业务逻辑代码
    }
}

3. 检查服务器上的依赖部署完整性

确认你的服务器bin目录下包含以下文件:

  • Microsoft.SqlServer.Types.dll(对应你安装的14.0.1016.290版本)
  • 对应的原生库文件夹:x86和x64,每个文件夹里要有sqlservertypes.dll和msvcr140.dll(14版本依赖的VC++运行库)
  • 如果服务器是64位系统,确保你的应用是以64位模式编译部署的,避免32/64位架构不匹配导致的加载失败

另外,你不需要手动在服务器安装SQL Server System CLR Types——SqlServerTypes NuGet包已经自带了所需的原生库,全局安装反而容易引发版本冲突。

4. 验证EF与SqlServerTypes的版本兼容性

如果按照上面的步骤还是有问题,可以尝试:

  • 暂时降级到EF6.2版本(这个版本还保留了SqlServerTypesAssemblyName属性),搭配SqlServerTypes 11.x版本,这个组合的兼容性经过大量验证,稳定性更高
  • 检查项目依赖,确保EntityFramework.SqlServer和Microsoft.SqlServerTypes的版本没有冲突(可以查看csproj或packages.config文件)

内容的提问来源于stack exchange,提问作者IronAces

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:19:16