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

7
我们有一个数据库项目,其中的视图与另一个数据库中的表进行连接。另一个数据库位于不同的解决方案中。在我们添加了对另一个数据库的DacPac的引用之前,这个项目构建失败了。我认为这些视图被认为是“组合数据库对象”,因为它们引用的对象不包括在数据库脚本中,而是在DacPac中引用。我们可以成功地从VS将此项目部署到目标数据库。
现在,我们正在尝试通过MSDeploy自动化部署。我们过去曾经成功地使用DacPacs创建清单来部署非组合数据库项目。例如:
但在这种情况下,部署失败,并出现以下错误:
错误SQL0:无法解析来自源“Other.dacpac”的外部元素的引用,因为没有加载此类源。警告SQL72025:未提供文件以供参考Other.dacpac;部署可能会失败。当创建包时,原始引用文件位于D:\BUILDS\6\CORE SERVICES\ACME DB(DEV2-DEPLOY)\SOURCES\ACME.SQLDEPLOY\DACPACS\Other.DACPAC。
错误:添加引用时发生错误。无法继续部署。错误计数:1。
有什么诀窍可以确保被引用的DacPac进入包中并且部署成功吗?

你可以趁此机会重新设计应用程序,避免跨数据库调用。它们真的必要吗? - Matthew Skelton
是的,它们是必需的。我找到的一些帖子表明,你可以将被引用的DACPAC文件放在与要部署的DACPAC文件相同的文件夹中,它会自动找到它们。但是在使用MSDeploy/DbDacFx时似乎不起作用。 - chief7
2个回答

2

最终我们必须:

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

虽然不是最理想的方法,但现在我们已经拥有了一个自动化部署DacPac引用DacPacs的过程。


2
感谢更新。值得注意的是,重新计算校验和最简单的方法是使用CertUtil(随Windows一起提供):CertUtil -hashfile .\model.xml SHA256 - Taran

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 将会找到它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接