我们有一个数据库项目,其中包含连接到另一个数据库中的表的视图。 另一个数据库位于不同的解决方案中。 直到我们从其他数据库添加对 DacPac 的引用,这才得以构建。 我相信这些视图被视为"复合数据库对象",因为它们引用的对象不是作为脚本包含在数据库中,而是在 DacPac 中引用。 我们可以成功地将这个项目从 VS 部署到目标数据库。
现在,我们正尝试通过MSDeploy自动部署。 过去,我们通过从清单创建包,使用 DacPacs 成功部署了非复合数据库项目。例如:
但在这种情况下,部署失败并显示以下错误:
错误 SQL0:从名为的源中引用外部元素 无法解析"Other.dacpac",因为没有这样的源 加载。 警告SQL72025:未提供任何文件以供参考 其他.dacpac;部署可能会失败。创建包时, 原始引用文件位于 D:\BUILDS\6\CORE SERVICES\ACME DB (DEV2-DEPLOY(\SOURCES\ACME.SQLDEPLOY\DACPACS\Other.DACPAC.
错误:添加引用时出错。 部署无法 继续。错误计数:1。
是否有技巧可以确保引用的 DacPac 进入包并成功完成部署?
最后我们不得不:
- 解压缩 DACPAC
- 将引用的 DacPac 的路径更改为相对路径
- 重新计算校验和并更新它
- 重新压缩 DacPac
不理想,但最终我们现在有一个引用 DacPac 的 DacPac 自动化部署过程。
这是一个老问题,但我们发现,如果在引用的路径上找不到 DACPAC,则可以将其包含在与引用 DACPAC 相同的目录中。
例如,如果ABC.dacpac
引用 msdb 数据库,则引用位置应位于 C:Program Files (x86)Microsoft Visual Studio 14.0Common7IDEExtensionsMicrosoftSQLDBExtensionsSqlServer120SqlSchemasmsdb.dacpac
但是,您可以将msdb.dacpac
复制到与ABC.dacpac
相同的目录,Microsoft.SqlServer.Dac.DacServices
会找到它