【问题标题】:Visual Studio & Circular Dependency woesVisual Studio 和循环依赖问题
【发布时间】:2013-01-08 01:22:35
【问题描述】:

我有一个由 15 个不同项目组成的旧系统,当我尝试从另一个 Visual Studio 中引用其中一个时,我抱怨它不能这样做,因为这会导致循环依赖。

我的问题是我看不到它会如何导致循环依赖,因为我尝试引用的项目('XScript')对尝试引用它的项目没有任何形式的引用( 'WPF_Forms')。

通过对这里的研究,我发现人们遭受了类似的命运,尽管他们的问题似乎具有明显的循环依赖性。

我已经按照这里的一些帖子的建议下载了 NDepend 的演示副本,尽管使用了各种依赖工具,但仍然没有明显的链接。

我已右键单击所涉及的项目并使用“项目依赖项”选项,但我看不到任何链接。我也重新启动了 Visual Studio 并尝试了“Clean Solution”和“Re-build Solution”,但无济于事。

我能想到的唯一方法是通过引用构建的 DLL 而不是项目本身来引用“XScript”,但这感觉有点脏,我想知道为什么会这样只是破解它。

谁能建议我可能遗漏的任何内容或我可以用来解决问题的任何策略?

编辑 1: XScript 用于引用 WPF_Forms,但该引用已被删除(并且该项目已清理和重建,并且“项目依赖项”窗口上没有显示任何依赖项。我想这可能是可能的VS 在某处保留了链接,或者它认为项目以某种方式链接。

编辑 2: 根据 BitBonk 的建议,我运行了使用 VS 的 Code Map 功能并制定了项目拓扑。 XScript 和 WPF_Forms 仅由主 .exe 引用,没有其他内容。我开始怀疑这是一个 VS 问题,我可能必须创建一个新项目并再次添加所有子项目才能使其正常工作。

【问题讨论】:

  • 也许投反对票的人可以解释为什么?我不确定这怎么算作一个坏问题?

标签: c# visual-studio visual-studio-2012 circular-dependency


【解决方案1】:

问题是:Visual Studio 2012。

使用 Bitbonk 建议的 Code Map 后,我看不到任何会导致问题的引用。因此,我从项目中删除了 XScript 和 WPF_Forms,运行了一次清理,重新添加了 XScript,运行了一次清理,然后重新添加了 WPF_Forms 并运行了一次清理。

之后,将 WPF_Forms 的引用添加到 XScript 并没有导致任何问题。我只能猜测这是 VS 中的一个错误,它是由它无法识别不再存在从 XScript 到 WPF_Forms 的依赖关系触发的。

希望这个问题和建议的答案将在未来对其他人有所帮助。

【讨论】:

  • 确实,这个问题和建议的答案正是我遇到的问题。我已将我的项目移至插件架构,因此我不得不反转依赖关系。让它工作的唯一方法是删除这两个项目,然后重新添加它们。这是在 VS2013 中,所以这个 bug 显然没有修复。
  • 有同样的问题,这是在 VS2013 WPF 解决方案中,删除两个项目,清理解决方案并将它们重新添加解决了问题。
  • 对我来说同样的问题。我有点疯了,但你的解决方案是正确的。那个该死的时刻,你不知道自己是否错了,或者 VS 是否离真相只有几英里远......
  • 我不能对此进行足够的投票!我知道这将是一个 vs 错误,但无法弄清楚如何强制正确的行为......一百万谢谢
【解决方案2】:

正如其他人已经说过的,您的循环依赖可能涉及多个级别。您可以使用 viusal studio 2012 的 code map 功能轻松可视化依赖关系图。这样您就可以发现发生这种情况的位置。

【讨论】:

  • 感谢您的建议BitBonk,这是一个有用的工具。但它并没有解释发生了什么,我稍后会将结果添加到我的问题中。
  • 如果你想要一个循环依赖怎么办?就我而言,我有一个域模型项目,然后在我的 Web 界面项目中,我有视图模型。现在我想要一个双向指向。
  • @Zapnologica 如果两组类真的应该相互引用,它们应该在同一个项目中。如果将它们放在同一个项目中是错误的,通常解决方案是共享公共程序集,该程序集具有由两个原始程序集中的类实现的接口。然后,您可以通过接口而不是具体设计来引用其他程序集中的类型。
【解决方案3】:

也许你的循环依赖涉及两个以上的项目。

【讨论】:

  • 感谢 Sebastian,我考虑过这一点,但查看 NDepend 生成的图表我看不出会是怎样。请查看我的编辑,因为我刚刚记住了一些可能有用的东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-25
相关资源
最近更新 更多