如何解决控制台应用中Microsoft.SqlServer.Types空间类型及函数不可用问题?
解决SQL Server 2016空间类型不可用的问题
我之前做控制台导入CSV到SQL Server 2016的项目时,也踩过这个一模一样的坑!给你几个亲测有效的解决步骤,按顺序试试:
先核对NuGet包版本是否匹配
SQL Server 2016对应的Microsoft.SqlServer.Types版本是13.x系列(因为SQL Server 2016内部版本是v13),如果你装的是更高版本(比如14+),很可能会出现兼容性问题。建议先卸载现有包,然后安装对应版本:Uninstall-Package Microsoft.SqlServer.Types Install-Package Microsoft.SqlServer.Types -Version 13.0.1700.0手动加载本地程序集
控制台应用不像Web应用会自动加载这个程序集的本地依赖,所以得在程序启动的地方(比如Main方法开头)加一行代码:using Microsoft.SqlServer.Types; // 在程序初始化时加载 SqlServerTypes.Utilities.LoadNativeAssemblies(AppDomain.CurrentDomain.BaseDirectory);这行代码会帮你加载对应的x86/x64本地库,避免找不到空间类型的问题。
检查SQL Server 2016的空间组件
有时候本地SQL Server 2016在安装时没勾选空间数据组件,也会导致这个错误。去控制面板的「程序和功能」里找到SQL Server 2016,点击「更改」,然后在功能选择界面确认「空间数据」相关选项已经勾选,完成修复安装。添加版本绑定重定向(如果有版本冲突)
如果你的项目里还有其他依赖不同版本Microsoft.SqlServer.Types的包,会出现版本冲突。在app.config里添加以下配置:<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-13.0.0.0" newVersion="13.0.0.0" /> </dependentAssembly> </assemblyBinding> </runtime>把
newVersion改成你实际安装的NuGet包版本号即可。
你找到的那篇博客应该也覆盖了程序集加载和版本匹配的核心点,结合上面的步骤应该就能解决这个问题了!
内容的提问来源于stack exchange,提问作者Rod
相关产品推荐
相关产品推荐

