【问题标题】:How to build a SSDT project with different Target Platform in CI or from msbuild如何在 CI 或 msbuild 中使用不同的目标平台构建 SSDT 项目
【发布时间】:2020-05-28 21:52:45
【问题描述】:

VS 2019 中的 SSDT 项目有一个目标平台,它在构建时指定 bacpac 的目标数据库版本:

对于本地开发,这是正确的,但在持续交付设置中,我们希望以 Azure 数据库为目标,这是一个不同的选项。尝试发布为 SQL Server 2017 构建的 bacpac 文件会导致错误 A project which specifies SQL Server 2017 as the target platform cannot be published to Microsoft Azure SQL Database v12.

发生这种情况是因为,我认为,在 bacpac model.xml 文件中有一行

<DataSchemaModel FileFormatVersion="1.2" SchemaVersion="2.9" DspName="Microsoft.Data.Tools.Schema.Sql.Sql140DatabaseSchemaProvider" CollationLcid="1033" CollationCaseSensitive="False" xmlns="http://schemas.microsoft.com/sqlserver/dac/Serialization/2012/02">

DspName 指的是 SQL Server 2017。

是否有传递给 msbuild 的选项,这将导致它为不同的 Azure SQL 数据库目标构建 bacpac?

我尝试使用发布配置文件并在从 Azure 数据库创建 ci.publish.xml 时指定 /p:SqlPublishProfilePath="Ci.publish.xml",但这不会影响 bacpac 的创建。事实上,ci.publish.xml 文件只包含一个数据库名称和连接字符串,与版本无关。

【问题讨论】:

  • 发布配置文件中还有“允许不兼容的平台”选项。这可能会解决您的问题

标签: azure-devops msbuild azure-sql-database sql-server-data-tools


【解决方案1】:

通常情况下,输入问题会让您思考,在sqlproj 文件中您将看到 SQL Server 2017:

   <DSP>Microsoft.Data.Tools.Schema.Sql.Sql140DatabaseSchemaProvider</DSP>

对于 Azure SQL 数据库:

   <DSP>Microsoft.Data.Tools.Schema.Sql.SqlAzureV12DatabaseSchemaProvider</DSP>

所以将选项传递给msbuild

msbuild /t:Build Db.sln /p:Configuration=Release /p:Platform="Any cpu" /p:DSP="Microsoft.Data.Tools.Schema.Sql.SqlAzureV12DatabaseSchemaProvider"

成功了。

【讨论】:

猜你喜欢
  • 2012-09-03
  • 2018-05-06
  • 2012-11-04
  • 1970-01-01
  • 1970-01-01
  • 2017-06-09
  • 2015-03-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多