Sql-Server

SQL Server Management Studio - 無法連接 - 找不到方法 SqlConnectionInfo.set_IsActiveDirectoryUniversalAuth

  • December 16, 2020

我有一個全新安裝的 Windows 10,上面安裝了 Microsoft Visual Studio 2015(因此,也安裝了預設數據庫)。我安裝了 SQL Server Management Studio 2016 (v13.0.16106.4) 但無法連接並出現以下錯誤消息:

無法連接到 MYSERVER\SQLEXPRESS。

找不到方法:‘無效 Microsoft.SqlServer.Management.Common.SqlConnectionInfo.set_IsActiveDirectoryUniversalAuth(Boolean)’。(連接Dlg)

從那以後,我試圖:

  • 安裝 SQL Server 2016
  • 解除安裝 SQL Server 2016 和 Visual Studio 2015 附帶的一個(按照http://intellitect.com/sql-server-2008-install-nightmare/
  • 清理完所有內容並重新啟動後,使用預設設置安裝 SQL Server 2016
  • 修復 Microsoft SQL Server Management Studio

請注意,無論我嘗試連接什麼(包括在伺服器文本框中輸入垃圾郵件),我都會收到相同的消息,這使我相信錯誤發生在 SSMS 實際嘗試連接到伺服器之前。

我沒主意了;似乎缺少一個 DLL 文件,但我不能說是哪個以及為什麼。

我發現的唯一“有用”參考是this technet forum post,它提到了一個“更新檔”,但我找不到這個“更新檔”的位置,如果它存在的話。

我可以連接sqlcmd -S mymachine\SQLEXPRESS;我也可以SELECT * from sys.databases成功執行查詢。

請注意,此答案將允許一些操作,但您仍然會有一個損壞的環境。

重要提示:這允許連接到數據庫並執行查詢,但您仍然會在 SSMS 中遇到錯誤!

我並不是說它很漂亮,但我現在可以使用 SQL Server Express 2016。

從文件夾中復製Microsoft.SqlServer.ConnectionInfo.dll文件:

C:\Program Files (x86)\Microsoft SQL Server\130\Tools\Binn\ManagementStudio

到這個文件夾(我強烈建議你先備份文件,然後你可以覆蓋文件):

C:\Windows\assembly\GAC_MSIL\Microsoft.SqlServer.ConnectionInfo\13.0.0.0__89845dcd8080cc91

為什麼它有效?

請注意,Microsoft 工程師會更好地回答這個問題,但這是我的理論:出於某種原因,已公開發布相同版本的程序集的不同Microsoft.SqlServer.ConnectionInfo版本(例如,作為 Visual Studio 和 SQL Server Express 版本的一部分)。GAC 中的那個不包含該SqlConnectionInfo.IsActiveDirectoryUniversalAuth屬性,但 SQL Server Management Studio Express 需要它。

我們在這裡所做的只是將 GAC 中的版本替換為 SSMS Express 附帶的版本,以便它載入這個版本。這影響依賴於該 dll 文件的所有內容,但希望在具有相同版本號的程序集中沒有重大更改……

我是怎麼找到這個的?

我通過搜尋 intertubes 找到了在哪個 dll 文件中指定了該類。然後我使用 sysinternalprocmon來查看實際上傳入了哪個版本的 dll。我在我的電腦上搜尋了該文件的其他潛在版本,並簡單地嘗試禁用版本,直到出現不同的錯誤。然後我嘗試用 SSMS Express 安裝文件夾中的其他版本替換它,它工作正常。所以我們來了!

更新

它並沒有解決所有問題……這是我在右鍵點擊數據庫並選擇屬性時遇到的錯誤。

Cannot show requested dialog. (SqlMgmt)
Method not found: 'Microsoft.SqlServer.Management.Common.DatabaseEngineEdition Microsoft.SqlServer.Management.Smo.SqlSmoObject.get_DatabaseEngineEdition()'. (SqlManagerUI)`

我嘗試在 GAC 中安裝所有內容但均未成功:ls "C:\Program Files (x86)\Microsoft SQL Server\130\Tools\Binn\ManagementStudio\*.d ll" | % { &"C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\gacutil.exe" /if $_.FullName }

我和你有同樣的錯誤,SQLServer 2016 也一樣。

從 SQL Server 2017 開始,SMO 作為 Nuget 包分發。

從 SQL Server 2017 開始,SMO 作為 Microsoft.SqlServer.SqlManagementObjects NuGet 包分發,以允許使用者使用 SMO 開發應用程序。

請參閱 msdn 頁面上的連結:安裝 SMO

即使我使用 SQL Server 2016,我似乎也需要安裝 nuget 包,而不是像以前那樣引用 Dll。

引用自:https://dba.stackexchange.com/questions/168427