目标是使用数据库项目上下文菜单中的“发布”菜单选项,在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内部构建项目时,将执行构建目标。
这是我们迄今为止没有运气的尝试(下面的每个项目都是一次一个地尝试,孤立地):
如果我使用上述任何“发布”方法并使用MSBuild执行发布目标,一切都按预期工作。如果我在VS2012中使用“发布”用户界面命令,则永远不会执行自定义命令。如果我将自定义命令连接到PostBuildEvent,它将通过MSBuild和VS2012运行。
似乎VS2012使用不同的方式发布数据库项目,并且除了Build目标之外没有连接到SSDT MSBuild目标。
是否有一种干净的方法来连接从VS2012用户界面调用的“发布”命令后执行的任意命令,理想情况下,成功完成?
我也知道这篇文章Publish data with SSDT?,但相对于VS2012之前使用的现有方法,这不是一种可接受的方法。
谢谢!
答案 0 :(得分:1)
我也研究过这个。
据我所知,当您使用VS 2012/2013上下文菜单中的Publish...
时,VS直接实例化SSDT SqlPublishTask,而不是使用通用系统定义,可能是因为它们可以集成它进入“数据工具”窗口。
我能想到的唯一解决方案是编写一个提供(上下文)菜单项的扩展,这将允许您使用您选择的目标调用MSBuild。 Extension SDK参考似乎包含您开始所需的一切,而MSBuild API参考可以在MSDN找到。
(快速搜索显示没有此类现有扩展名。)
不幸的是,我无法访问VS Pro,因此不能使用DiM :(。