简化 SSDT 数据库项目到 localdb 的部署

Posted

技术标签:

【中文标题】简化 SSDT 数据库项目到 localdb 的部署【英文标题】:Streamlined deploy of SSDT Database Project to localdb 【发布时间】:2015-08-17 22:52:07 【问题描述】:

如果你在 VS 2015 中有一个 SSDT 数据库项目设置为启动项目,它会在你按下 F5 时执行构建和部署

========== Build: 1 succeeded or up-to-date, 0 failed, 0 skipped ========== ========== Deploy: 1 succeeded, 0 failed, 0 skipped ==========

这与“发布...”命令不同,因为它不会引导您完成发布对话框。它只是自动部署到 localdb 实例(通过项目的调试配置指向。

我经常需要将数据库部署到 localdb,以便我可以针对它运行代码生成工具,而不是运行整个解决方案(具有其他应用程序,即我不想通过 F5 运行)。

所以我想要做的是确定是否有一个项目级别的推荐,我可以添加到我的工具栏,它可以自动将无对话框部署到 localdb,而不是 F5 的 Start Debug 命令。我正在查看“添加命令”对话框(右键单击工具栏->“自定义”),还查看了来自“键盘自定义”选项中的 SSDT.* 命令。

有谁知道是否有一个仅用于数据库项目 Build+Deploy 或 Deploy 的命令,它会自动执行吗? (同样,“发布...”命令不是我想要的,因为它不会像上面那样自动部署)

【问题讨论】:

【参考方案1】:

我尝试了不同的方法来做到这一点,我左右摇摆的两种方法是:

    有一个 powershell 脚本来调用 sqlpackage.exe 来部署 dacpac。正常构建项目(ctrl+shift + b)然后 alt tab 到 powershell 并运行最后一个命令(部署脚本)

    使用 Studioshell (https://studioshell.codeplex.com/) 创建一个 Visual Studio 命令来进行构建然后部署,然后您可以映射

(2) 更接近您想要的,但我个人更喜欢 (1),因为它更简单。使用 (1) 对我的好处是:

该脚本与我在 CI、QA、Prod 等中用于部署 dacpac 的脚本相同,因此这意味着我对其进行了很多(和很多)测试 我很容易看到任何错误和警告,并且可以密切关注对象何时被一遍又一遍地重新部署,这样我就可以解决问题而不是不注意并且部署时间越来越长

我看到很多类似的问题,所以我想我会正确地写下我的想法:https://the.agilesql.club/blog/Ed-Elliott/Visual-Studio-SSDT-Publish-My-Personal-Best-Practices

无论你做什么(这个或其他什么)跟进你的经历,我(至少!)会觉得很有趣!

编辑

【讨论】:

不知道 sqlpackage.exe,谢谢。我能够把它放在一个构建后的事件中,所以它会在构建时发生。不确定它是否是正确的解决方案,因为它本质上是为调试构建而硬编码的,但您可以将它与配置文件结合起来,为不同的构建提供更灵活的东西(参见链接)。在我的情况下,我真的不希望它自动部署到除 localdb 以外的任何地方,并且其他部署是使用模式比较+脚本到文件的显式部署。 benday.com/2012/12/18/…【参考方案2】:

我找到了两种选择:

    右键解决方案,选择“启动项目”,“多个启动项目”,将数据库项目设为其中之一。

    右键单击解决方案,选择“项目依赖项”,并使数据库项目成为将要构建的其他项目之一的依赖项。

【讨论】:

以上是关于简化 SSDT 数据库项目到 localdb 的部署的主要内容,如果未能解决你的问题,请参考以下文章

SSDT 数据库项目中对系统数据库的引用变得重复

LocalDB安装

SSDT/VS2015 数据库部署——发布忽略嵌套视图

LocalDB的使用方法

在IIS使用localDB

Visual Studio 2015 中缺少 LocalDB?