共享少数 SSDT 项目源代码的方法?

Way to share source code for few SSDT projects?

背景:我们有数据库结构的通用部分,这是我们产品的基础,这部分是为客户定制的。所以我们可能有很多最终结构有共同的部分。

我目前的解决方案将每个项目拆分为两个 SSDT 项目:核心项目和自定义项目(参考核心)。

这种方法会生成两个单独的 dacpack,这是不需要的,因为它会导致两步部署:核心 dacpac 用于创建数据库,然后自定义 dacpac 用于更新它。

我只想为两个部分生成一个 dacpac。 因此,我正在寻找在 ssdt 项目之间共享代码的方法。

我知道将单个文件共享为链接的解决方案,但这会导致大量手动工作,尤其是对于许多最终项目。

我尝试了共享项目(由 Xamarin 使用),但它们仅限于 C# 和 VB 个项目。

我正在寻找任何建议。

据我所知,没有允许您拥有单个 dacpac 文件的内置功能,但是在许多情况下这并不是什么大问题。您可以将所有共享对象放入它自己的项目中,然后将其作为 相同的数据库 引用(您有这样的选择,然后添加数据库引用)。您还可以将此类项目的 dacpac 放入某个共享文件夹中,并在需要时引用它而不是项目。对于部署,您需要为要发布的项目/dacpac(包含共享代码的项目)创建发布配置文件。

进一步调查使我找到了满足我需求的解决方案:

可以配置 SSDT 部署的发布配置文件,同时部署参考项目的结构。

需要做三件事:

  1. 在发布高级设置中选中选项 "Include composite objects"。 (见图)
  2. 在部署期间,引用的 dacpac 需要与已部署的 dacpac 位于同一文件夹中。
  3. Post/pre 项目中引用的部署脚本未执行,但存在简单的解决方法:post/pre 最终项目的部署脚本可能包含来自引用项目的脚本,方法是使用“:r”指令。

重要通知:无法通过 SSMS studio 使用该选项部署 dacpack,可以通过 Visual Studio 和 sqlpackage.exe。