数据库项目(DACPAC)问题 - 持续交付

时间:2015-07-19 12:59:52

标签: tfs msbuild tfsbuild build-process-template

我有Microsoft TFS构建过程将Web项目部署到azure web角色,这种情况每天都会自动发生。我已经关注了Azure文章https://azure.microsoft.com/en-in/documentation/articles/cloud-services-dotnet-continuous-delivery/

我在构建过程中有以下MSBuild参数,如上面的文章建议

/t:Publish /p:PublishDir=C:\MSCD\

当我将数据库项目添加到我的项目解决方案时,构建将继续失败。获取错误消息

  

" SqlPublishTask"任务没有给出所需的值   参数" SqlPublishProfilePath"

当我发布我的网络项目时,我不希望发布数据库项目。如何将DACPAC文件丢弃到drop文件夹?所以我可以使用powershell在azure中更新我的数据库。

我正在使用TFS 2012内部部署。有人可以提出如何解决这个问题的建议吗?

2 个答案:

答案 0 :(得分:2)

您需要创建主子构建定义,并在主构建定义中配置解决方案,并在配置管理器中禁用构建和部署。并在子构建中单独配置数据库项目。

创建主要和子级构建定义,以便它们共享公共删除。

答案 1 :(得分:1)

@Siva palla's answer为我解决了这个完全相同的问题。这是我们为完成此工作而进行的完整更改的集合。

Visual Studio中的更改

最初,我使用的是一个名为“ Deployment”的配置,该配置用于部署我们的WinForms项目和SQL项目(VisionShellWin是WinForms项目,两个Vision.SQLMigration项目是SSDT项目),因此下面的内容都是基于更改部署。对于大多数人来说,您将拥有“发行版”而不是“部署”,以下所有内容仍然可以正常工作,只需用“发行版”代替“部署”即可:

enter image description here

要将单个配置分成两个,我创建了一个新配置:

enter image description here

我将新部署设置为从旧的“部署”配置复制其设置,而不是为每个项目创建新配置(现有项目级别的“部署”都可以):

enter image description here

然后在该新部署中,取消选中用于构建和部署数据库项目的框:

Configuration with SSDT projects not ticked to Build

然后我再次做完全相同的事情来创建特定于数据库的部署:

enter image description here

在那一个中​​,我取消了除数据库文件以外的所有内容:

enter image description here

这是Visual Studio所需的一切,因此我将所有内容都提交了,并将其同步回DevOps。

Azure DevOps中的更改

在DevOps中,我克隆了现有的Visual Studio Build阶段(称为“ Build Winforms解决方案”),并将克隆重命名为Build Databases:

enter image description here

我在“变量”选项卡中添加了两个新的构建变量,名为ClickOnceBuildStageConfiguration和DatabasesBuildStageConfiguration,其值设置为我们刚刚在VS中创建的新配置的名称:

enter image description here

然后我将WinForms的构建阶段更改为使用新的ClickOnceBuildStageConfiguration变量-请注意,我们仍然具有ClickOnce所需的/T:"VisionShellWin" /target:Publish MSBuild参数:

enter image description here

以及使用数据库变量的新构建数据库阶段-请注意,我们没有任何MSBuild参数: enter image description here

最后,除了复制阶段外,我还具有将ClickOnce应用程序文件复制到drop工件中的功能:

enter image description here

我还添加了一个“复制文件”阶段(称为“复制Dacpacs”),也将DacPac复制到放置中:

enter image description here

完成所有这些操作后,您应该以可以正常工作的构建和包含ClickOnce文件和DacPacs的构件结束

enter image description here