自从首次引入 Visual Studio 2010 的数据库项目以来,我们一直在将它们用于多个内部或单一客户项目,并且到目前为止它们对我们来说非常有用。现在,我们首次将它们与需要打包安装在任意客户站点的“盒装”产品一起使用。
到目前为止,我所看到的一切都表明我将.dbschema
文件以及vsdbcmd
工具及其要求作为我的 MSI 的一部分发送,然后在安装过程中启动该工具。
这真的是完成这项任务的最简单方法吗?我们这样做是为了我们最初的 beta 测试,但到目前为止,这似乎是一个快速的 hack,而不是一个好的长期部署策略。特别是,在安装我们的软件之前,我们被迫在机器上安装SQL Server CE 32 位和 SQL Server CE 64 位。每次在 MSI 中打包我们需要的东西的尝试都失败了,因为我们缺少一个或另一个架构中的程序集。
我们研究的另一件事是运送sqlcmd
我们在构建时“部署”项目时生成的输出文件,但这些文件包括我们内部开发服务器的硬编码服务器名称(并且它不是像数据库名称那样的 SQLCMD 变量是),这意味着我们必须在服务器安装期间编辑 .sql 脚本。同样,这很有效,但总的来说这似乎是一个坏主意。
我们的最后一种方法,如果我不能想出更好的东西,我们最终可能会为生产做些什么,是根据部署输出手动生成创建和升级脚本,然后在我们的安装程序中包含一个自定义工具来执行基于用户交互的脚本(通过SqlClient
或sqlcmd
类似的东西),但这似乎违背了数据库项目的大部分目的。
是否有任何其他方法可以构建和打包 VS2010 DB 项目以自动部署到不同的服务器,而不涉及安装 2 个版本的 SQL CE 并使用我们的安装程序运送一块 Visual Studio?