You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

加载Microsoft.SqlServer.Smo失败相关问题求助

问题描述

执行以下PowerShell命令时出现错误:

Add-Type –AssemblyName “Microsoft.SqlServer.Smo, Version=12.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91”

错误信息:

Add-Type: C:\src\sql\sql-objects-001.ps1:1
Line |
   1 |  Add-Type -AssemblyName “Microsoft.SqlServer.Smo, Version=12.0.0.0, Cu …
     |  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     | Cannot find path 'C:\src\sql\Microsoft.SqlServer.Smo.dll' because it does not exist.

疑问:

  1. Add-Type 是否始终需要绝对路径?
  2. 系统中存在多个Microsoft.SqlServer.Smo.dll文件,是否需要匹配对应SQL Server版本(2016、2019、2022)才能正常访问?

系统中找到的所有Microsoft.SqlServer.Smo.dll路径:

PS C:\> (Get-ChildItem -Recurse -File -Filter 'Microsoft.SqlServer.Smo.dll' -ErrorAction SilentlyContinue).FullName
C:\Program Files\Azure Data Studio\resources\app\extensions\mssql\sqltoolsservice\Windows\4.4.1.5\Microsoft.SqlServer.Smo.dll
C:\Program Files\WindowsPowerShell\Modules\SqlServer\21.1.18226\Microsoft.SqlServer.Smo.dll
C:\Program Files\WindowsPowerShell\Modules\SqlServer\21.1.18226\coreclr\Microsoft.SqlServer.Smo.dll
C:\Program Files (x86)\Microsoft SQL Server\120\SDK\Assemblies\Microsoft.SqlServer.Smo.dll
C:\Program Files (x86)\Microsoft SQL Server Management Studio 19\Common7\IDE\Microsoft.SqlServer.Smo.dll
C:\Program Files (x86)\Microsoft SQL Server Management Studio 19\Common7\IDE\CommonExtensions\Microsoft\SSIS\160\Binn\150References\SMO\Microsoft.SqlServer.Smo.DLL
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\CommonExtensions\Microsoft\SSAS\Microsoft.SqlServer.Smo.dll
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\Extensions\Microsoft\SQLCommon\130\Microsoft.SqlServer.Smo.dll
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\Extensions\Microsoft\SQLCommon\140\Microsoft.SqlServer.Smo.dll
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\Extensions\Microsoft\SQLCommon\150\Microsoft.SqlServer.Smo.dll
C:\src\dbatools\bin\smo\Microsoft.SqlServer.Smo.dll
C:\src\dbatools\bin\smo\coreclr\Microsoft.SqlServer.Smo.dll
C:\Users\lit\.nuget\packages\microsoft.sqlserver.sqlmanagementobjects\150.18118.0\lib\net45\Microsoft.SqlServer.Smo.dll
C:\Users\lit\.nuget\packages\microsoft.sqlserver.sqlmanagementobjects\150.18118.0\lib\netstandard2.0\Microsoft.SqlServer.Smo.dll
C:\Users\lit\.vscode\extensions\ms-mssql.mssql-1.18.0\sqltoolsservice\4.5.1.6\Windows\Microsoft.SqlServer.Smo.dll
C:\Users\lit\OneDrive\Documents\PowerShell\Modules\dbatools\1.1.95\bin\smo\Microsoft.SqlServer.Smo.dll
C:\Users\lit\OneDrive\Documents\PowerShell\Modules\dbatools\1.1.95\bin\smo\coreclr\Microsoft.SqlServer.Smo.dll
C:\Users\lit\OneDrive\Documents\PowerShell\Modules\SqlServer\21.1.18256\Microsoft.SqlServer.Smo.dll
C:\Users\lit\OneDrive\Documents\PowerShell\Modules\SqlServer\21.1.18256\coreclr\Microsoft.SqlServer.Smo.dll
C:\Users\lit\OneDrive\Documents\WindowsPowerShell\Modules\dbatools\1.0.113\bin\smo\Microsoft.SqlServer.Smo.dll
C:\Users\lit\OneDrive\Documents\WindowsPowerShell\Modules\dbatools\1.0.113\bin\smo\coreclr\Microsoft.SqlServer.Smo.dll
C:\Users\lit\OneDrive\Documents\WindowsPowerShell\Modules\SqlServer\21.1.18218\Microsoft.SqlServer.Smo.dll
C:\Users\lit\OneDrive\Documents\WindowsPowerShell\Modules\SqlServer\21.1.18218\coreclr\Microsoft.SqlServer.Smo.dll
C:\Users\lit\OneDrive\Documents\WindowsPowerShell\Modules\SqlServer\21.1.18245\Microsoft.SqlServer.Smo.dll
C:\Users\lit\OneDrive\Documents\WindowsPowerShell\Modules\SqlServer\21.1.18245\coreclr\Microsoft.SqlServer.Smo.dll
C:\Windows\assembly\GAC_MSIL\Microsoft.SqlServer.Smo\11.0.0.0__89845dcd8080cc91\Microsoft.SqlServer.Smo.dll
C:\Windows\assembly\GAC_MSIL\Microsoft.SqlServer.Smo\12.0.0.0__89845dcd8080cc91\Microsoft.SqlServer.Smo.dll
C:\Windows\assembly\GAC_MSIL\Microsoft.SqlServer.Smo\13.0.0.0__89845dcd8080cc91\Microsoft.SqlServer.Smo.dll
解答

1. Add-Type 不需要始终使用绝对路径

你遇到的错误本质是命令里用了中文全角引号,PowerShell无法正确解析程序集名称,误把它当成了本地文件路径。换成英文半角引号就能解决:

Add-Type –AssemblyName "Microsoft.SqlServer.Smo, Version=12.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"

正常情况下,Add-Type -AssemblyName会自动从全局程序集缓存(GAC)、PowerShell模块路径或系统默认搜索目录里找指定程序集,完全不用手动写绝对路径。

如果是要直接加载本地某个特定DLL,才需要用绝对或相对路径,比如:

Add-Type -Path "C:\Program Files (x86)\Microsoft SQL Server\120\SDK\Assemblies\Microsoft.SqlServer.Smo.dll"

2. SMO版本与SQL Server版本的匹配逻辑

SMO(SQL Server管理对象)和SQL Server实例版本是兼容而非严格绑定的:

  • 高版本SMO兼容低版本实例:比如用SMO 15.0(对应SQL Server 2019)可以管理2016、2019、2022所有版本的实例。
  • 低版本SMO无法管理高版本实例:比如SMO 12.0(对应SQL Server 2014)处理不了2019/2022的新特性,会报错。

从你的路径能看到,GAC里已经有12.0版本的SMO,但如果要管理2016及以上的SQL Server,建议用更高版本的SMO(比如13.0/15.0/16.0)。

更省心的替代方案

直接装官方的SqlServer PowerShell模块,它会自动加载适配的SMO版本,不用手动调用Add-Type:

Install-Module -Name SqlServer -Force -AllowClobber
Import-Module SqlServer

或者用dbatools模块,它封装了SMO的所有功能,操作更简单,还自动处理版本兼容问题:

Install-Module -Name dbatools -Force -AllowClobber
Import-Module dbatools

内容的提问来源于stack exchange,提问作者lit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 11:17:56