【问题标题】:Nested references between database projects in SSDT cannot be resolvedSSDT中数据库项目之间的嵌套引用无法解析
【发布时间】:2020-12-29 04:45:04
【问题描述】:

我目前正在创建一个包含 40 多个项目和大量参考资料的大型数据库解决方案。

很常见的情况是项目A引用项目B,然后项目B引用项目C,以此类推:

A->B->C->D

当我尝试构建项目 D 时,一切正常。项目 C 也是如此,它解析了对 D 的引用并成功构建。

当我尝试构建项目 B 时,我收到如下错误:

无法解析来自名为 D.dacpac' 的源对外部元素的引用,因为没有加载此类源。

我确定所有参考都已设置,并且没有遗漏任何内容。我的 dacpacs 为每个项目存储在 bin/Debug 文件夹中。

请就如何继续我的调查提供一些提示或想法。

【问题讨论】:

  • 你不能在不使用变量的情况下在 SSDT 中使用 3/4 部分命名。在此处查看我的评论如何组织项目:stackoverflow.com/questions/56289174/sql-deployment-automation/…。您也可以在我的 git repo 中查看示例解决方案:github.com/dkultasev/SSDTPowerTemplate
  • @DmitrijKultasev,我已经在使用变量作为数据库名称
  • 项目 B 也应该包括对 D 的引用
  • @DmitrijKultasev 谢谢!您能否更详细地解释为什么我需要添加那些“传递引用”,或者分享一些链接?我以为 Visual Studio 会自动拾取它们。
  • 不幸的是,像 SSDT 这样出色的工具的文档很少。我可以尝试解释一下我是如何理解的:当您引用 db C 时,它具有来自 D 的对象,而 SSDT 也在尝试为它们获取元数据,以便能够正确验证所有内容。此外,您可以尝试在为项目 C 添加引用时勾选“抑制被引用项目中未解决的引用导致的错误”。这也可能有效。

标签: sql sql-server sql-server-data-tools database-project


【解决方案1】:

即使我已经在 cmets 中回答过,它可能对其他有类似问题的人有所帮助。

解决方案是:您需要添加对所有其他 dacpacs 的父项目的引用。所以在你的情况下,project B 应该有 both CD 项目的参考。

当您添加对C 项目的引用时,另一个可能的选项是勾选“引用嵌套数据库引用的外部元素问题”复选框,但这并不总是有效。

【讨论】:

    猜你喜欢
    • 2020-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-17
    相关资源
    最近更新 更多