Github Action执行sqlpackage报错:找不到sqlpackage.dll
问题排查:Github Action部署Azure SQL时sqlpackage提示找不到sqlpackage.dll
问题根源
sqlpackage是基于.NET的应用程序,运行时需要依赖同目录下的sqlpackage.dll、sqlpackage.deps.json、sqlpackage.runtimeconfig.json等配套文件。你当前仅将单个可执行文件移动到/usr/local/bin,导致程序启动时无法找到必需的依赖组件,从而报错。
修复方案
1. 修改sqlpackage安装步骤,完整复制所有依赖文件
将原来仅移动单个可执行文件的命令,改为复制整个解压目录的所有内容到/usr/local/bin:
- name: Install sqlpackage if: steps.cache.outputs.cache-hit != 'true' run: | wget https://aka.ms/sqlpackage-linux -O sqlpackage.zip unzip sqlpackage.zip -d sqlpackage chmod +x sqlpackage/sqlpackage sudo cp -r sqlpackage/* /usr/local/bin/
2. 补充缓存命中后的恢复步骤
当缓存命中时,直接从缓存目录复制所有文件到目标路径:
- name: Restore sqlpackage from cache if: steps.cache.outputs.cache-hit == 'true' run: sudo cp -r sqlpackage/* /usr/local/bin/
3. 修复部署命令的语法小问题
部署步骤中/TargetDatabaseName:TestDB末尾的反斜杠后缺少空格,可能导致参数解析错误,修正后:
- name: Deploy DACPAC to TestDB run: | /usr/local/bin/sqlpackage /Action:Publish \ /SourceFile:./${{ env.DB_DACPAC_NAME }}/db.dacpac \ /TargetServerName:${{ secrets.DB_SERVER }} \ /TargetDatabaseName:TestDB \ /TargetUser:${{ secrets.DB_USER }} \ /TargetPassword:${{ secrets.DB_PASSWORD }} \ /Diagnostics:true
优化建议
使用微软官方提供的sqlpackage-action替代手动下载安装,该Action会自动处理依赖和路径配置,简化Workflow:
- name: Install sqlpackage uses: microsoft/sqlpackage-action@v2 with: version: 'latest'
使用该Action后,可直接在部署步骤中调用sqlpackage命令,无需手动指定路径。
内容的提问来源于stack exchange,提问作者James Richardson
相关产品推荐
相关产品推荐

