如何在 CI 或从 msbuild 中构建具有不同目标平台的 SSDT 项目
How to build a SSDT project with different Target Platform in CI or from msbuild
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"
成功了。
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"
成功了。