自从Visual 2010的数据库项目第一次被引入以来,我们就一直在为几个内部或单客户项目使用数据库项目,到目前为止,它们为我们工作得很好。现在,我们第一次将它们与“盒装”产品一起使用,该产品需要打包,以便在任意的客户站点安装。
到目前为止,我所看到的一切都表明,我将.dbschema文件加上vsdbcmd工具及其需求作为MSI的一部分,然后启动该工具作为安装的一部分。
这真的是完成这个任务的最简单的方法吗?我们这样做是为了我们的初步测试,但到目前为止,这似乎是一个快速的黑客,而不是一个好的长期部署战略。特别是,在安装我们的软件之前,我们不得不在计算机上安装- Server 32位和Server 64位。每一次在MSI中打包我们需要的东西的尝试都失败了,因为我们错过了一个或另一个体系结构中的程序集。
我们研究的另一件事是在构建时“部署”项目时生成的输出sqlcmd文件,但这些文件包括内部开发服务器的硬编码服务器名称(而不是像数据库名那样的SQLCMD变量),这意味着我们必须在服务器安装期间编辑.sql脚本。同样,这也奏效了,但总的来说,这似乎是个坏主意。
我们的最后一种方法--如果我想不出更好的东西--我们可能最终会为生产做什么--基于部署输出手工生成和升级脚本,然后在安装程序中包含一个自定义工具,该工具基于用户交互执行脚本(通过SqlClient或sqlcmd或其他类似工具),但这似乎正在挫败数据库项目的许多目的。
有没有其他方法来构建和打包一个VS2010 DB项目,以便在不同的服务器上进行自动部署,而不需要安装两个版本的SQL,并随安装程序一起传送一段Visual?
发布于 2012-07-14 12:55:36
据我所知,你最初的建议可能是最好的。
微软似乎从一开始就知道这一点,因为他们推荐并有关于如何在不需要Visual的构建服务器上安装vsdbcmd的说明。您可以很容易地将这种想法扩展到在客户站点上安装。
虽然您可以想出自己的方法来创建输出文件并对它们执行一些后期构建过程,但是您只是将复杂性移到了其他地方,并创建了另一段需要维护的代码。
SQL的安装程序没有那么大,并且使它成为MSI的一部分,使事情变得简单、打包在一起,并确保您从数据库项目中获得最大的功能。
在这个问题中,我回答了一个类似的问题,并链接到了相关的MS文章:
Can I do database deployments, without installing Visual Studio or VSTSDB?
https://stackoverflow.com/questions/10435739
复制相似问题