部署到服务器后WebApi出现Microsoft.SqlServer.Types缺失错误求助
解决WebApi部署后出现"Spatial types and functions are not available..."错误的方案
我之前也碰到过一模一样的问题——本地调试完全正常,一部署到服务器就直接抛这个空间类型相关的错误,折腾了好一会儿才搞定,给你几个靠谱的解决办法:
方法一:通过NuGet安装Microsoft.SqlServer.Types包(最推荐)
这个方法能自动处理依赖,避免手动复制文件的麻烦:
- 打开你的WebApi项目,右键选择「管理NuGet程序包」
- 在搜索框输入
Microsoft.SqlServer.Types,选择合适的版本安装(建议和你本地使用的SQL Server版本匹配,或者选兼容的最新稳定版) - 安装完成后,在项目的
Global.asax(如果是Framework项目)或者Startup类(Core项目)里添加初始化代码,确保程序启动时能加载原生依赖:
// Framework项目示例(Global.asax的Application_Start方法中) SqlServerTypes.Utilities.LoadNativeAssemblies(Server.MapPath("~/bin")); // Core项目示例(Startup.cs的Configure方法中) SqlServerTypes.Utilities.LoadNativeAssemblies(AppContext.BaseDirectory);
部署时,相关的原生DLL会被自动打包到bin目录,服务器就能找到依赖了。
方法二:手动部署缺失的DLL文件
如果不想用NuGet,也可以手动复制依赖文件:
- 在本地找到SQL Server安装目录下的
Microsoft.SqlServer.Types.dll(通常路径是C:\Program Files\Microsoft SQL Server\XX.X\Shared,XX.X对应SQL Server版本,比如140对应2017版) - 同时复制对应版本的原生空间DLL:比如
SqlServerSpatial110.dll/SqlServerSpatial140.dll,注意区分x86和x64版本,根据服务器系统架构选择 - 把这些DLL放到WebApi项目的bin目录下,再重新部署到服务器
方法三:通过Web.config绑定重定向适配版本
如果服务器上已经安装了SQL Server相关组件,但版本和项目依赖不匹配,可以用绑定重定向解决:
在Web.config的<configuration>节点内添加以下配置(注意修改版本号为你实际使用的版本):
<runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="Microsoft.SqlServer.Types" publicKeyToken="89845dcd8080cc91" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-14.0.0.0" newVersion="14.0.0.0" /> </dependentAssembly> </assemblyBinding> </runtime>
补充说明
本地正常运行是因为你本地大概率安装了SQL Server或其客户端组件,自带了这些空间类型依赖;而服务器上默认没有安装这些组件,所以才会找不到对应的程序集。优先用方法一,省心不容易出错。
内容的提问来源于stack exchange,提问作者chaitanya k
相关产品推荐
相关产品推荐

