3

自从首次引入 Visual Studio 2010 的数据库项目以来,我们一直在将它们用于多个内部或单一客户项目,并且到目前为止它们对我们来说非常有用。现在,我们首次将它们与需要打包安装在任意客户站点的“盒装”产品一起使用。

到目前为止,我所看到的一切都表明我将.dbschema文件以及vsdbcmd工具及其要求作为我的 MSI 的一部分发送,然后在安装过程中启动该工具。

这真的是完成这项任务的最简单方法吗?我们这样做是为了我们最初的 beta 测试,但到目前为止,这似乎是一个快速的 hack,而不是一个好的长期部署策略。特别是,在安装我们的软件之前,我们被迫在机器上安装SQL Server CE 32 位和 SQL Server CE 64 位。每次在 MSI 中打包我们需要的东西的尝试都失败了,因为我们缺少一个或另一个架构中的程序集。

我们研究的另一件事是运送sqlcmd我们在构建时“部署”项目时生成的输出文件,但这些文件包括我们内部开发服务器的硬编码服务器名称(并且它不是像数据库名称那样的 SQLCMD 变量是),这意味着我们必须在服务器安装期间编辑 .sql 脚本。同样,这很有效,但总的来说这似乎是一个坏主意。

我们的最后一种方法,如果我不能想出更好的东西,我们最终可能会为生产做些什么,是根据部署输出手动生成创建和升级脚本,然后在我们的安装程序中包含一个自定义工具来执行基于用户交互的脚本(通过SqlClientsqlcmd类似的东西),但这似乎违背了数据库项目的大部分目的。

是否有任何其他方法可以构建和打包 VS2010 DB 项目以自动部署到不同的服务器,而不涉及安装 2 个版本的 SQL CE 并使用我们的安装程序运送一块 Visual Studio?

4

1 回答 1

1

据我所知,您最初的建议可能是最好的。

微软似乎从一开始就知道这一点,因为他们推荐并有关于如何vsdbcmd在不需要 Visual Studio 的情况下在构建服务器上安装的说明。您可以轻松地将这种想法扩展到在客户站点上安装。

虽然您可以想出自己的方法来创建输出文件并对其进行一些后期构建过程,但您只是将复杂性移到了其他地方并创建了另一部分需要维护的代码。

SQL CE 的安装程序并没有那么大,将其作为 MSI 的一部分使事情变得简单、打包在一起,并确保您从数据库项目中获得最大的功能。

我在这个 SO 问题中回答了与此类似的问题并链接到相关的 MS 文章:
我可以在不安装 Visual Studio 或 VSTSDB 的情况下进行数据库部署吗?

于 2012-07-14T12:55:36.457 回答