PowerShell脚本中SQL Package Extract命令执行失败求助
问题分析与解决方法
错误根源
报错核心是找不到Microsoft.SqlServer.TransactSql.ScriptDom, Version=12.0.0.0程序集,大概率是安装VS2022 SSDT后,系统内该程序集被更新至更高版本(如16.x),但当前运行的旧版SqlPackage仍依赖12.0版本,导致加载冲突。
解决步骤
1. 确认当前SqlPackage版本
运行以下命令查看版本,判断是否为旧版(15.x及以下):
sqlpackage /version
2. 补充缺失的12.0版本依赖包
- 通过NuGet下载12.0.0.0版本的
Microsoft.SqlServer.TransactSql.ScriptDom:Install-Package Microsoft.SqlServer.TransactSql.ScriptDom -Version 12.0.0.0 - 找到下载后的程序集(路径示例:
packages\Microsoft.SqlServer.TransactSql.ScriptDom.12.0.0.0\lib\net40),复制到SqlPackage的安装目录(默认路径如C:\Program Files\Microsoft SQL Server\150\DAC\bin)。
3. 配置程序集版本重定向(若步骤2无效)
在SqlPackage.exe所在目录创建SqlPackage.exe.config文件,添加重定向规则,让高版本程序集替代12.0版本加载:
<?xml version="1.0" encoding="utf-8"?> <configuration> <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="Microsoft.SqlServer.TransactSql.ScriptDom" publicKeyToken="89845dcd8080cc91" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-16.0.0.0" newVersion="16.0.0.0" /> </dependentAssembly> </assemblyBinding> </runtime> </configuration>
注:newVersion需替换为你系统中实际存在的版本号,可在C:\Windows\Microsoft.NET\assembly\GAC_MSIL\Microsoft.SqlServer.TransactSql.ScriptDom目录下查看。
4. 直接使用VS2022自带的SqlPackage
VS2022 SSDT安装的SqlPackage路径示例:C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\Extensions\Microsoft\SQLDB\DAC\160,修改脚本中调用SqlPackage的部分,指定完整路径:
& "C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\Extensions\Microsoft\SQLDB\DAC\160\SqlPackage.exe" $arguments
该版本依赖更高版本的ScriptDom,不会出现12.0版本缺失问题。
5. 调整环境变量优先级
检查系统PATH,将VS2022自带的SqlPackage路径移至旧版路径之前,确保默认运行的是新版程序。
内容的提问来源于stack exchange,提问作者USMC6072
相关产品推荐
相关产品推荐

