VS 2013 数据库项目:基于构建配置运行的部署后脚本

Posted

技术标签:

【中文标题】VS 2013 数据库项目:基于构建配置运行的部署后脚本【英文标题】:VS 2013 Database Project: Post-Deployment scripts to run based off of build configuration 【发布时间】:2014-08-27 15:31:17 【问题描述】:

在 Visual Studio 2012/2013 中基于 SSDT 的数据库项目中,是否有可用的方法/机制根据构建配置运行一组不同的部署后脚本?我想通过使用“测试”配置进行部署来预先填充我的数据以进行测试/持续集成,但自然不想在其他环境中这样做。不过,我似乎找不到有条件地将部署后脚本链接到构建配置的方法,这对我来说真的很奇怪。

【问题讨论】:

【参考方案1】:

您可以通过编辑 MSBuild 使用的 .sqlproj 文件来完成此操作。然后,当您在“测试”配置中构建时,您将获得与在“发布”模式下构建时不同的 dacpac 内容。例如:

创建项目并添加 PostDeployment 脚本 卸载项目并编辑 .sqlproj 文件 将包含 PostDeploy 脚本的 ItemGroup 更改为如下所示:

<ItemGroup Condition=" '$(Configuration)' == 'Release' "> <PostDeploy Include="Debug.PostDeployment1.sql" /> </ItemGroup>

在 Debug 配置中构建并解压 dacpac:不会包含 postdeploy.sql 文件 构建测试配置并解压 dacpac:postdeploy.sql 文件将在那里。

【讨论】:

【参考方案2】:

您也可以使用 SQLCMD 变量来执行类似的操作。如果 value == "Test",则运行一组值。如果没有,请运行其他内容。我在这里写了一篇博客:

http://schottsql.blogspot.com/2013/05/trick-to-not-run-prepost-sql-on-publish.html

它不是在构建时完成的,并且总是以这种方式包含脚本,但如果这不是问题,它为您提供了一种轻松编写代码以轻松在各种环境中运行的方法。

【讨论】:

嗯...如何将 SQLCMD 值设置为构建配置?我尝试使用$(Configuration),但它只是解析了该值并存储了“调试”。 我们创建发布配置文件来完成所有这些工作。然后我们使用该发布配置文件进行构建。我知道有一个传递 SQLCMD 值的选项,但不确定它是什么。我们更经常先构建,然后使用 SQLPackage 发布以设置值。

以上是关于VS 2013 数据库项目:基于构建配置运行的部署后脚本的主要内容,如果未能解决你的问题,请参考以下文章

VS2012 自动化部署 - 没有为项目设置 OutputPath 属性

在 VS2015 中部署 UWP 应用项目

Visual Studio 2013 构建和发布

基于VS2013 MFC的OPENCV3.1环境构建及测试

VS2013安装部署过程详解

让 MSBuild 和 CruiseControl .NET 构建和部署 VS2010 数据库项目