2

目标是使用数据库项目上下文菜单中的“发布”菜单选项(通过右键单击数据库)从 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 目标。

如果我使用上述任何“发布”方法并使用 MSBuild 执行发布目标,一切都会按预期工作。如果我在 VS2012 中使用“发布”用户界面命令,则永远不会执行自定义命令。如果我将自定义命令连接到 PostBuildEvent,它将通过 MSBuild 和 VS2012 运行。

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

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

我也知道这篇文章,使用 SSDT 发布数据?,但相对于 VS2012 之前使用的现有方法,这不是可接受的方法。

谢谢!

4

1 回答 1

1

我也调查过这个。

据我所知,当您Publish...从 VS 2012/2013 上下文菜单中使用时,VS 直接实例化SSDT SqlPublishTask,而不是使用通用系统定义,大概是为了将其集成到“数据工具”窗口中。

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

快速搜索发现没有这样的现有扩展。)

不幸的是,我无法访问 VS Pro,所以不能 DiM :(。

于 2014-02-03T20:36:01.253 回答