无法使用 sqlpackage.exe 将 DACPAC 发布到 Azure SQL 数据库

Unable to publish DACPAC to Azure SQL Database using sqlpackage.exe

尝试将 DACPAC 应用于 Azure SQL 数据库时,我从 sqlpackage.exe 获得以下信息:

*** An error occurred during deployment plan generation. Deployment cannot continue. The Element or Annotation class SqlDatabaseOptions does not contain the Property class CatalogCollation.

我已经设法使用 VS2017 和 SSDT 创建一个包,然后使用 SQL 服务器对象资源管理器将它部署到另一个数据库,但是当我使用 sqlpackage.exe 在

C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\Extensions\Microsoft\SQLDB\DAC0

Azure SQL 数据库兼容性级别设置为 140,所以我不确定 SSDT (v 15.6.0) 是否使用更现代的 sqlpacakage.exe 版本,或者我会在哪里使用找到它?我还尝试从 Azure SQL 数据库部署 VSTS 任务中 运行 它并获得相同的结果。

我已经尝试映射在 this window 中找到的命令行开关,但同样,我仍然遇到同样的错误。

是否有我找不到的 SSDT 使用的 sqlpackage.exe 版本,或者它是我缺少的参数?

作为参考,这是我正在使用的命令:

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

看来您可能需要更新计算机上的 Microsoft SQL 服务器数据层应用程序框架。请下载最新版本here。安装后,您将在以下路径中找到它 C:\Program Files (x86)\Microsoft SQL Server0\DAC\bin\SqlPackage.exe” 并独立于 SSDT / SSMS 进行更新。

SSMS 有自己的 SqlPackage 版本。 SSDT 也有自己的版本,您可以在 C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\Extensions\Microsoft\SQLDB\DAC0.

中找到

Azure SQL 是一种 PaaS 服务,这意味着它透明地接收更新,并且相对频繁地接收具有新兼容性级别的更新。

Azure SQL 现在是 150。
当您创建新数据库时,它将使用最新版本进行配置。 但是,您的机器,您的部署代理可能没有部署最新的工具。
当工具与数据库的兼容级别不匹配时,部署将失败。

如果您使用 VSTS Hosted Agent 进行部署,您将无法控制,它总是会落后一点。在这种情况下,最简单的解决方法是降低数据库兼容性级别。
这很容易,因为您只需要 运行 在数据库上执行 SQL 语句,如下所示:

ALTER DATABASE database_name
SET COMPATIBILITY_LEVEL =  130;