MSDeploy / WebDeploy - 通过DacPac部署复合数据库项目

时间:2014-12-08 19:44:50

标签: web-deployment msdeploy webdeploy dacpac

我们有一个数据库项目,其视图连接到另一个数据库中的表。另一个数据库采用不同的解决方案。在我们从其他数据库添加对DacPac的引用之前,这无法构建。我相信这些视图被认为是“复合数据库对象”,因为它们引用的对象不包含在数据库中作为脚本,而是在DacPac中引用。我们可以成功地将此项目从VS部署到目标数据库。

现在我们正在尝试通过MSDeploy自动部署。我们过去通过从清单创建包来成功部署使用DacPacs的非复合数据库项目。例如:

  

但在这种情况下,部署失败并出现以下错误:

  

错误SQL0:对名为source的外部元素的引用   'Other.dacpac'无法解决,因为没有这样的来源   加载。警告SQL72025:未提供任何文件以供参考   Other.dacpac;部署可能会失败。当包创建时,   原始引用文件位于D:\ BUILDS \ 6 \ CORE SERVICES \ ACME DB   (DEV2部署)\ SOURCES \ ACME.SQLDEPLOY \ DACPACS \ Other.DACPAC。

     

错误:添加引用时发生错误。部署不能   继续。错误计数:1。

是否有诀窍确保引用的DacPac进入包并且部署成功完成?

2 个答案:

答案 0 :(得分:2)

最后我们不得不:

  • 解压缩DacPac
  • 将引用的DacPac的路径更改为相对
  • 重新计算校验和并进行更新
  • 重新压缩DacPac

不理想,但最终我们现在有一个DacPac引用DacPacs的自动部署过程。

答案 1 :(得分:1)

这是一个老问题,但我们发现如果在引用的路径上找不到DACPAC,则可以将其包含在与引用DACPAC相同的目录中。

例如,如果ABC.dacpac引用了msdb数据库,则引用位置应为C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\Extensions\Microsoft\SQLDB\Extensions\SqlServer\120\SqlSchemas\msdb.dacpac

但是,您可以将msdb.dacpac复制到与ABC.dacpac相同的目录,Microsoft.SqlServer.Dac.DacServices会找到它