如何在CI或msbuild中使用不同的目标平台构建SSDT项目

问题描述 投票:0回答:1

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

enter image description here

对于本地开发,这是正确的,但是在连续交付设置中,我们要针对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个回答
0
投票

[经常发生,键入问题会让您思考,在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"

有技巧。

© www.soinside.com 2019 - 2024. All rights reserved.