【问题标题】:Generate multiple DACPACs targeting multiple target platforms生成针对多个目标平台的多个 DACPAC
【发布时间】:2020-04-28 01:41:14
【问题描述】:

我有一个 SSDT sql server 数据库项目,我想将其部署到本地 SQL Server 2016 和 SQL Azure。

看来我只能将项目设置为针对一个平台

我希望能够构建这个项目(使用 VSTS 构建代理)并获得多个 DACPAC 文件,每个目标平台一个。

这个问题Visual Studio Database project target platform in publish profile实际上可能就是答案。但是我感觉我可能需要单独的 DACPAC 来部署场景。

【问题讨论】:

    标签: sql-server-data-tools sqlproj


    【解决方案1】:

    由于我使用 Visual Studio 进行构建,我可以将属性参数传递给命令行

    /p:DSP=Microsoft.Data.Tools.Schema.Sql.SqlAzureV12DatabaseSchemaProvider
    

    这让我可以在构建时控制数据库模式提供程序。在 YAML 天蓝色管道中使用它看起来像这样:

            - task: VSBuild@1
              inputs:
                solution: '$(build.SourcesDirectory)\mydatabase\whoopie.sqlproj'
                vsVersion: 'latest'
                msbuildArgs: '/p:DSP=Microsoft.Data.Tools.Schema.Sql.SqlAzureV12DatabaseSchemaProvider'
    

    【讨论】:

      【解决方案2】:

      您不需要单独的 dacpac,从技术上讲,甚至不需要单独的发布配置文件。您需要在发布时设置选项以允许不兼容的平台。只要您不使用不适用于该版本 SQL Server 的功能,您就可以将数据库发布到任何受支持的平台。

      【讨论】:

      • 所以它是部署设置还是构建时间设置?如果可能,请显示这是在哪里设置的?
      • 查看它的最简单方法是右键单击项目并选择“发布”。你会看到一堆选项,包括目标数据库/服务器。如果需要,您可以更改它,甚至可以为每个服务器/数据库设置不同的选项。在幕后,您将构建一个“dacpac”文件,可以在多个场景中重复使用 - 您可以搜索文件系统以查看它。
      【解决方案3】:

      如果您右键单击项目并单击“发布...”然后打开高级,则可以选择忽略数据库不兼容性。

      【讨论】:

        【解决方案4】:

        我为类似的事情使用了两种不同的方法。两者都有些乏味,但工作:

        1. 在构建过程中,使用脚本修改目标平台和程序集名称,然后为您要支持的每个目标平台构建项目。

        2. 或者,为每个目标平台创建单独的数据库项目。但是,您可以从“主”项目链接到它们,而不是将文件复制到每个项目中。在 Visual Studio 中,您将“添加现有项”,但随后在添加对话框中,您选择“添加为链接”。现在,您只需在一个地方维护该文件,但它被几个不同的数据库项目引用。

        #2 最繁琐的部分是,每次向“主”项目添加新文件时,都必须记住在其他项目中链接到它。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-10-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多