[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
文件仅包含数据库名称和连接字符串,无论如何都与版本无关。
[经常发生,键入问题会让您思考,在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"
有技巧。