Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net MSBuild:是否自动收集数据库迁移脚本?_Asp.net_Sql Server_Svn_Msbuild_Continuous Integration - Fatal编程技术网

Asp.net MSBuild:是否自动收集数据库迁移脚本?

Asp.net MSBuild:是否自动收集数据库迁移脚本?,asp.net,sql-server,svn,msbuild,continuous-integration,Asp.net,Sql Server,Svn,Msbuild,Continuous Integration,环境概述 Asp.net web应用程序(源代码存储在svn中) SQL Server数据库。(存储在svn中的数据库架构(表/存储过程) db版本与web应用程序集版本同步。(存储在表“CurrentVersion”中) CI hudson服务器,用于从repo签出web应用程序并运行自定义msbuild文件以发布/打包应用程序 我的msbuild脚本在每个生成上更新web应用程序的程序集版本(Major.Minor.Revision.Build)。“版本”设置为当前签出的svn版本,“版

环境概述

  • Asp.net web应用程序(源代码存储在svn中)
  • SQL Server数据库。(存储在svn中的数据库架构(表/存储过程)
  • db版本与web应用程序集版本同步。(存储在表“CurrentVersion”中)
  • CI hudson服务器,用于从repo签出web应用程序并运行自定义msbuild文件以发布/打包应用程序
我的msbuild脚本在每个生成上更新web应用程序的程序集版本(Major.Minor.Revision.Build)。“版本”设置为当前签出的svn版本,“版本”设置为哈德逊版本号(在每个自动版本上递增)

通过这种方式,我可以将应用程序与特定的主干版本相匹配,还可以从哈德逊版本号中获取其他版本的统计信息

我想自动收集迁移脚本(更新的存储过程等)以添加到zip包中。 我想通过比较尚未部署到的db的svn修订版和正在部署的修订版,我可以找到自上次部署到该数据库/环境以来主干中的db文件发生了哪些更改

这可以通过手动调用
svn diff-r REVNO:REVNO
命令列出更改的.sql文件来轻松实现。然后,这些文件可能必须手动添加到包中。 如果这可以自动化,那就太好了

首先,我想我必须编写一个自定义任务来检查尚未部署到的db版本。在那之后,我很不确定。 对于如何通过现有或自定义的msbuild任务实现这一点,有人有什么建议吗


最后,我必须自动生成一个脚本,添加到更新数据库版本表的包中,以便与应用程序同步。

看看SQL数据库项目。在VS2010中,它们得到了相当大的增强,并具有内置的部署功能,可以将您的开发人员数据库同步到其他环境

以下是一些关于vs 2010中DB项目的好链接:

试试SQL考官:


您可以使用SQL检查器命令行工具自动收集脚本。

将SQL更改集成到自动构建/部署过程中是很困难的。我知道,因为我已经尝试过几次了,但成功有限。你试图做的大致上是正确的,但我认为这实际上有点太复杂了。在您的建议中,您建议收集需要在构建/打包时应用于数据库的特定SQL脚本。相反,您应该将所有增量脚本(用于数据库的整个历史记录)打包到项目中,并计算部署时实际需要应用的增量——这样,您的可部署包就可以部署到具有不同版本数据库的环境中。要实现这一点,您需要两个实现部分:

1) 您需要将增量打包到可部署包中。请注意,您应该打包增量,而不是在当前状态下创建模式的静态文件。这些增量脚本应该在源代码管理中。在源代码管理中也可以保持静态模式,但必须使其与增量保持同步。实际上,您可以使用诸如Red Gate的SQLCompare或VS数据库版本之类的工具从静态模式生成(大多数)增量。要将增量放入可部署包中,并且考虑到您正在使用svn,您可能需要研究svn:externals,将增量脚本“软链接”到web项目中。然后,构建脚本可以简单地将它们复制到可部署包中

2) 您需要一个能够读取增量文件列表、将其与现有数据库进行比较、确定需要应用于该数据库的增量,然后应用增量(并更新簿记信息,如数据库版本)的系统。有一个开源项目(由ThoughtWorks赞助)实现了这一点。我个人使用该工具取得了一些成功


祝你好运——这是一个(正确的)难题。

目前针对.NET/SQL Server堆栈的解决方案有:

  • (开源)
  • (更深入的Visual Studio集成, 自动生成脚本)

后一种产品是我们在Redgate积极开发的产品。

这是一个非常棘手的问题。我们使用了相当多的构建脚本,但我仍在努力将DB转换为SVN,有时开发人员会非常抵制更改:)好的,找到了一个SVN命令,它可以将更改的文件列表输出到xml文件。因此,我应该能够通过msbuild处理该xml文件,以将所需的各个文件签出到构建工作区。“>;”命令是关键;)svn diff-r REVNO:REVNO--xml--summary“svn://PathToTrunk" >; d:/temp.xml