解決 Windows 11 Arm 無法正確存取 localdb 問題

  • 281
  • 0

因為 Apple 近年來把 CPU 逐漸換成 Silicon 架構,過去有些人習慣在 Mac 上使用 Windows 就會沒辦法安裝 x86/x64 版的 Windows,而微軟自家的 Surface 也有出 ARM 架構的版本,後來微軟也陸續讓一些自家軟體支援 ARM 架構的 CPU,其中也包含了開發工具 Visual Studio,從 Visual Studio 2022 17.4 版之後也正式支援 ARM CPU 了,而 Windows ARM 也內建 x86/x64 模擬,可以讓更多非 ARM 架構的程式也可以順利在上面執行,因此我也開始嘗試在 Windows 11 ARM 進行開發,而第一個遇到的問題就是在連線到 localdb 時候會導致錯誤,後面就把解決的過程稍微記錄一下。

說明

首先建立一個 ASP.NET MVC 的專案並啟用身分驗證,然後執行專案並點選 Register,輸入完帳號密碼之後送出,假設連線的到 localdb 的話就應該會出現建立 Table 相關的資訊,但是卻會出現錯誤。

一開始以為是因為 localdb 無法正確執行,但是透過 SSMS 是可以連上,而版本是 15.0.4153,是安裝 Virual Studio 時候一起安裝好的版本。

再測試看看使用 Azure SQL Database 的話,發現是可以正常連線上去的,因此再回頭仔細確認錯誤訊息發現有提到 SQLUserInstance.dll 這一個組件,有了關鍵字之後找了一些網路上的討論,說明這一個元件是 x86/x64 架構的程式,因此導致無法在 Windows 11 ARM 底下正確執行,而連線 localdb 是會需要透過此組件的,後來又找了很多討論也都只停留在說明此元件是 x86/x64 的元件,並沒有找到任何解決辦法,該不會以後在 Windows 11 ARM 底下只能連 Azure SQL Database ,這樣測試跟驗證的小專案不能使用 localdb 就會很不方便了,後來突然靈機一動,因為預設專案執行平台都會是 Any CPU,那我特別指定 x86/x64 是不是就可以正常運作了?透過組態管理員新增一個 x64 的設定之後來執行專案,同樣的執行註冊的操作,出現熟悉的初始化 db 的操作了,可以正確的連線上 localdb 了!

套用之後就會去初始化 DB 把相關的 Table 建立起來,這時候再回到 SSMS 就看到相關的 Table 有正確被建立起來了。

而如果不透過組態管理員設定,也可以在專案檔裡面設定預設的目標平台,打開專案檔案加入底下的設定,之後專案預設一樣會以 x86 來執行專案了。

<PlatformTarget>x64</PlatformTarget>

參考資料