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

使用sqlpackage.exe发布DACPAC到Azure SQL Database遇CatalogCollation属性错误

解决SqlDatabaseOptions不包含CatalogCollation属性的部署错误

这个问题的核心原因很明确:你使用的sqlpackage.exe版本太旧,不支持Azure SQL Database的CatalogCollation属性,而你用VS2017 SSDT v15.6.0生成的DACPAC已经包含了这个新属性,导致旧版本工具无法识别。

下面是具体的解决步骤:

1. 找到VS2017 SSDT对应的sqlpackage.exe版本

你之前用的是Visual Studio 14.0(VS2015)的sqlpackage(路径里的130对应SQL Server 2016版本),而VS2017的SSDT对应的工具在不同的路径下:

  • 一般路径格式:C:\Program Files (x86)\Microsoft Visual Studio\2017\<你的VS版本,比如Community/Professional/Enterprise>\Common7\IDE\Extensions\Microsoft\SQLDB\DAC\150
  • 如果你不确定具体路径,可以在VS2017的安装目录里搜索sqlpackage.exe,找到版本最高的那个(SSDT v15.6.0对应的工具版本通常是15.x)

2. 验证sqlpackage版本

找到路径后,打开命令提示符运行:

sqlpackage.exe /version

确保版本号在14.0以上,最好和你的SSDT版本匹配(比如15.6.x),这样才能完全支持Azure SQL DB的新特性。

3. 使用正确版本重新执行部署命令

替换掉旧的路径,用新找到的sqlpackage.exe运行部署命令,比如:

"C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\Extensions\Microsoft\SQLDB\DAC\150\sqlpackage.exe" /SourceFile:"generated.dacpac" /Action:Publish /TargetServerName:"xxxxxxx.database.windows.net" /TargetDatabaseName:"xxxxxxx" /TargetUser:"xxxxxx" /TargetPassword:"xxxxxxx" /TargetTimeout:120

4. 修复VSTS Azure SQL Database Deployment任务的问题

在VSTS任务中,你需要确保使用的是匹配版本的sqlpackage:

  • 任务配置里,找到“SqlPackage.exe location”选项,选择Use latest installed version(如果代理机器上已经安装了正确的SSDT版本)
  • 或者手动指定你找到的正确路径
  • 作为临时 workaround,也可以在“Additional Arguments”里添加/p:IgnoreCatalogCollation=True,让工具忽略这个属性,但这只是临时方案,长期来看还是建议使用匹配的工具版本

补充说明

CatalogCollation是Azure SQL Database较新引入的属性,用于控制数据库的目录排序规则,旧版本的sqlpackage(比如130版本)没有对这个属性的支持,所以无法解析SSDT v15.6.0生成的DACPAC文件。确保SSDT和sqlpackage版本一致,就能避免这类兼容性问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:23:03