SQL Server与Visual Studio:解决Microsoft.SqlServer.Types版本冲突问题
解决SQL Server CLR程序集版本冲突问题(Microsoft.SqlServer.Types)
别担心,这个版本冲突问题在CLR程序集开发里挺常见的,我给你两个最优方案,按优先级来选:
方案1:让项目引用和SQL Server一致的版本(最推荐,新手友好)
你的核心矛盾是VS项目里用了15.100.0.0版本的Microsoft.SqlServer.Types,但SQL Server 2019自带的是15.0.0.0,而且这个是系统级程序集根本动不了。所以最直接省心的就是把项目里的引用版本改成和SQL Server匹配的:
- 打开VS 2019的项目,右键点击「引用」→「管理NuGet程序包」
- 切换到「已安装」标签,找到
Microsoft.SqlServer.Types,点击「卸载」确认移除当前的高版本 - 再切换到「浏览」标签,搜索
Microsoft.SqlServer.Types,找到15.0.0.0版本(注意看版本号,选和SQL Server一致的基础版本),点击「安装」 - 重新编译你的程序集,再导入SQL Server,这个版本冲突的错误就会消失了
方案2:用程序集绑定重定向(必须用高版本时可选)
如果因为某些功能依赖,你必须用15.100.0.0版本,那可以通过绑定重定向让SQL Server把对高版本的引用映射到系统自带的15.0.0.0版本:
- 在你的CLR类库项目里添加一个
app.config文件(如果项目里没有的话) - 把下面的配置代码粘贴进去:
<configuration> <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="Microsoft.SqlServer.Types" publicKeyToken="89845dcd8080cc91" culture="neutral" /> <bindingRedirect oldVersion="15.100.0.0" newVersion="15.0.0.0" /> </dependentAssembly> </assemblyBinding> </runtime> </configuration>
- 重新编译项目,然后把编译好的程序集导入SQL Server。这时候SQL Server会自动按照重定向配置,用系统的
15.0.0.0版本来替代你引用的高版本,解决加载失败的问题。
小提醒
绑定重定向要确保15.0.0.0版本包含你用到的所有API,不然可能会出现运行时错误。所以如果不是必须用高版本,优先选方案1更稳妥。
内容的提问来源于stack exchange,提问作者SWP_IB




