如何在VS2012中为数据库项目连接SSDT发布后命令

时间:2013-07-02 14:16:35

标签: sql-server visual-studio-2012 msbuild sql-server-data-tools

目标是使用数据库项目上下文菜单中的“发布”菜单选项,在Visual Studio 2012用户界面中成功发布数据库项目之后,连接要运行的目标或命令(例如,任意可执行文件)(右侧 - 单击解决方案资源管理器中的数据库项目并选择发布)。我们有一个现有的自定义数据加载器程序,可以从XML文件(从主数据库转储)批量加载数据,继续使用这种现有方法会非常方便。我们不能使用部署后的SQL文件来加载数据,因为加载时间太长,难以维护(手动)。我们加载的数据是应用程序所需的大量配置数据,而不是应用程序的事务数据(甚至更大)。

我们目前正在使用Microsoft Visual Studio Ultimate 2012,11.0.60610.01 Update 3和SQL Server Data Tools 11.1.30618.1。使用VS2012(.sqlproj)中的数据库项目模板创建数据库项目。我们将发布到SQL Server 2008 R2和SQL Server 2012.我们知道sqlproj文件中包含的SSDT MSBuild目标文件及其内容。似乎在“发布”命令期间,VS2012不会执行此文件中定义的任何部署或发布目标。但是,当从VS2012内部构建项目时,将执行构建目标。

这是我们迄今为止没有运气的尝试(下面的每个项目都是一次一个地尝试,孤立地):

  1. 将可执行命令连接到PostPublishEvent(类似于PostBuildEvent)。
  2. 将可执行命令连接到PostDeployEvent(类似于PostBuildEvent)。
  3. 连接一个新的自定义目标,该目标取决于执行命令的AfterPublish目标。
  4. 连接一个新的自定义目标,该目标依赖于执行该命令的AfterDeploy目标。
  5. 覆盖sqlproj文件中的AfterPublish目标。
  6. 覆盖sqlproj文件中的AfterDeploy目标。
  7. 覆盖sqlproj文件中的SqlPublish目标。
  8. 如果我使用上述任何“发布”方法并使用MSBuild执行发布目标,一切都按预期工作。如果我在VS2012中使用“发布”用户界面命令,则永远不会执行自定义命令。如果我将自定义命令连接到PostBuildEvent,它将通过MSBuild和VS2012运行。

    似乎VS2012使用不同的方式发布数据库项目,并且除了Build目标之外没有连接到SSDT MSBuild目标。

    是否有一种干净的方法来连接从VS2012用户界面调用的“发布”命令后执行的任意命令,理想情况下,成功完成?

    我也知道这篇文章Publish data with SSDT?,但相对于VS2012之前使用的现有方法,这不是一种可接受的方法。

    谢谢!

1 个答案:

答案 0 :(得分:1)

我也研究过这个。

据我所知,当您使用VS 2012/2013上下文菜单中的Publish...时,VS直接实例化SSDT SqlPublishTask,而不是使用通用系统定义,可能是因为它们可以集成它进入“数据工具”窗口。

我能想到的唯一解决方案是编写一个提供(上下文)菜单项的扩展,这将允许您使用您选择的目标调用MSBuild。 Extension SDK参考似乎包含您开始所需的一切,而MSBuild API参考可以在MSDN找到。

快速搜索显示没有此类现有扩展名。)

不幸的是,我无法访问VS Pro,因此不能使用DiM :(。