为Visual Studio 2010数据库项目自定义部署脚本

问题描述:

由Visual Studio 2010数据库项目生成的部署脚本不适用于我。我需要将它们包含在MSI中,这些MSI将被运送到许多不同的客户,以升级和创建新的数据库。为Visual Studio 2010数据库项目自定义部署脚本

翻阅Microsoft.Data.Schema ...命名空间我发现自定义生成部署脚本,DeploymentScriptGenerator,ExtensionManager等的许多可能性。它看起来好像它被设计成可扩展并支持任何数据库。

我找不到任何“入门”文档或样本。有没有人做过这样的事情?

Visual Studio Data Projects使用两个部署阶段。

通过构建数据库项目创建的部署文件实际上只是一组元数据,它描述了数据库所需的最终状态,但不知道要在何处部署或者它是否是新数据库,或者现有数据库。

第二部分实际上是针对特定数据库(现有的或新的)执行部署包。为此,Visual Studio必须针对数据库和部署包运行diff,并确定需要应用哪些更改,并生成应用这些更改所需的脚本。

所以你的问题是,如果你在你的MSI中包含第一部分,你需要在最终用户的机器上运行一些东西,将这些更改应用到未知数据库中的未知数据库中,他们真的把它们运送给Visual Studio。

幸运的是,MS也包含一个命令行(VSDBCMD.exe),它允许您采用该单个部署软件包并使用它来将更改应用到任何数据库。这个工具将和Visual Studio做同样的区别,并生成创建/升级数据库所需的SQL脚本(如果你愿意,可以根据命令行参数实际运行脚本)。有关如何从命令行调用它的信息,请参阅http://msdn.microsoft.com/en-us/library/dd193283.aspx。因此,我看到你在你的应用程序中运行该命令行工具(只要确保仔细检查重新分发许可证以确保它没问题),并在你的MSI(或其他实用程序)中进行自定义操作即可执行它以应用数据库更改。还要检查命令行工具的依赖关系,我知道它需要SQL SMO对象,SQL Native Client以及其他一些东西。您需要确保MSI将这些作为先决条件。

+0

感谢您的回复。我们已经创建了一个实用程序来创建和更新客户服务器上的数据库。我们不得不在几年前创建。现在,我们正试图弄清楚如何使用数据库项目以及我们需要对我们的实用程序进行的操作。我曾看过VSDBCMD,但它并未在REDIST.TXT中列出,因此我们无法重新分配它。虽然有博客文章声称它可以重新分发,也许我正在阅读错误的许可证。 – 2012-01-09 16:49:12

+0

有趣的,显然它确实在VS 2008中提到过:http://blogs.msdn.com/b/gertd/archive/2008/08/22/redist.aspx,但我没有在VS中的任何地方看到相应的信息2010。 – 2012-01-09 17:02:47