Azure DevOps脚本Invoke-Sqlcmd报错,求排查破坏性变更及修复方案
问题分析与修复方案
已知变更背景
微软托管的ubuntu-latest镜像在2025年6月17日晚至18日凌晨完成了.NET Runtime环境的版本更新,替换了System.Runtime、System.Management.Automation等核心依赖程序集,导致Azure PowerShell 8.3与SqlServer模块的依赖兼容性断裂,这是触发本次错误的直接原因。
修复方案
1. 锁定SqlServer模块兼容版本
在安装SqlServer模块时指定与Azure PowerShell 8.3兼容的稳定版本,避免自动拉取最新的不兼容版本:
Install-Module -Name SqlServer -RequiredVersion 22.1.1 -Force -AllowClobber
2. 手动加载兼容的核心程序集
在脚本开头添加强制加载对应版本程序集的命令,绕过自动依赖解析的问题:
# 加载兼容版本的System.Runtime Add-Type -Path "/usr/share/dotnet/shared/Microsoft.NETCore.App/6.0.*/System.Runtime.dll" # 加载兼容版本的System.Management.Automation Add-Type -Path "/usr/share/dotnet/shared/Microsoft.NETCore.App/6.0.*/System.Management.Automation.dll"
3. 切换至固定版本的Ubuntu代理镜像
将管道的vmImage从ubuntu-latest改为ubuntu-22.04,该镜像环境配置更稳定,不会自动同步最新的.NET Runtime更新,从根源避免此类兼容性问题:
pool: vmImage: 'ubuntu-22.04'
4. 配置.NET运行时回退策略
在DeploymentScript的Bicep定义中添加DOTNET_ROLL_FORWARD环境变量,强制使用兼容的.NET运行时版本:
resource sqlDeploymentScript 'Microsoft.Resources/deploymentScripts@2023-08-01' = { name: 'your-script-name' location: resourceGroup().location kind: 'AzurePowerShell' properties: { azPowerShellVersion: '8.3' environmentVariables: [ { name: 'DOTNET_ROLL_FORWARD' value: 'LatestMinor' } ] scriptContent: ''' # 你的原有脚本逻辑 ''' cleanupPreference: 'OnSuccess' retentionInterval: 'PT1H' } }
内容的提问来源于stack exchange,提问作者Aiden Dipple
相关产品推荐
相关产品推荐

