Dapper 使用 Microsoft.SqlServer.Types 找不到正確版本問題

Microsoft.SqlServer.Types-could-not-load-file-or-assembly-correct-version
Could not load file or assembly 'Microsoft.SqlServer.Types, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91

緣由
最近因為工作緣故一直都有在處理地理資料,那最常用的 SQL Server 也有提供地理資料型態,SQL Server 提供了兩種關於地理資料型態,分別為: gepgraphy 與 geometry,這兩種的差別我當初也好奇了很久,之後再寫一篇文章來說明,後來採用的 geography 作為儲存的型態
使用 Dapper 作為存取資料庫的方法,因為使用到 geography 的關係,所以裝了 Microsoft.SqlServer.Types,這又是一段故事,容後再說
使用的 SQL Server 是 2012,所以安裝的版本就選了 11.0.2
開發測試一切都沒問題,結果一部署上去,有用到地理資料的部分就爆了 Exception,錯誤訊息節錄如下
Could not load file or assembly 'Microsoft.SqlServer.Types, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91
到這邊就令人百思不解,我明明就安裝的是 SQL Server 2012,Nuget 版本也都選 11.0.2,怎麼會突然爆出一個找不到 Microsoft.SqlServer.Types, Version=10.0.0.0 的錯誤,想了一陣子確定沒用到關於 SQL Server 2008 系列的東西,於是就上網找了找
找到了這篇:Could not load file or assembly ‘Microsoft.SqlServer.Types
原因與解法
深入了看一下,因為使用了 SQL Server Spatial Types,應用程式在伺服器上找不到相對應的 Dll,所以就出錯了
解決方法很簡單,微軟有提供 SQL Server System CLR Types 安裝檔,最佳回答的連結已經更換了,微軟直接把他切成一個一個的安裝檔,這樣就不用只為了一個功能還要安裝所有檔案
我在後面的回答整理了連結
Microsoft® System CLR Types for SQL Server® 2008 R2:
X86 Package(SQLSysClrTypes.msi)
X64 Package (SQLSysClrTypes.msi)
安裝完畢後應該就可以生效,若是沒生效重開機即可
備註
根據不同的版本,需要下載相對應的 System CLR Types

![[IT 鐵人賽] ASP.NET Core 與 Log 紀錄和追蹤的愛恨交織 - Day 05 - Elmah - 02](/_next/image?url=https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1776070454149%2Fa0702417-5357-4217-a572-7ba53ea36735.png&w=3840&q=75)
![[IT 鐵人賽] Azure Data Service - Day 04 - Cognitive Service - 辨識 - Video Indexer](/_next/image?url=https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1776070473207%2F6423fd4a-4041-4bb2-b918-4cfe3f9aea5e.png&w=3840&q=75)