2016-11-16 153 views
8

我正在处理的解决方案包含400多个项目。这个问题不可重复,但非常烦人。 (Windows 8.1,Visual Studio 2015 Update 2和3)VS不承认项目依赖关系

基本上,计算构建顺序时不考虑某些项目依赖关系。该进程停止并出现错误:找不到所提到的dll。它偶尔会发生,通常是一个不同的项目“失踪”。许多时候没有什么是错的,它只是起作用。找不到任何图案。

如果我手工构建'缺失'项目然后构建解决方案,一切都很好,或者其他项目'缺少'。

看起来好像VS已经失去了项目依赖关系的轨迹,尽管每个引用都在那里,正如VS和csproj文件中所看到的那样。

查看屏幕截图:解决方案构建已停止,因为缺少DLL。生成dll的项目被正确引用(请参阅解决方案资源管理器),但在“项目依赖项”对话框中不可见。我的猜测是,由于缺少依赖关系,构建顺序变得混乱,并且基于并行编译造成的某种随机性 - 在某些情况下,依赖项目被构建得太晚。

dependency not recognized properly

注:是的,我可以检查复选框,但正如我所说,出现此问题随机和随机项目。是的,我可以通过预先手动构建受影响的项目来解决此问题。我正在寻找根本问题的解决方案。

欢迎提供任何提示和意见。

+0

我在添加这些引用时遇到了问题;它需要明确保存。 (我做了一个'File-> save all'来避免类似的错误)。再次关闭并开始VS也会帮助我时不时。 –

+0

根据您的描述,我创建了一个包含3个项目(1个主项目,2个类库项目)的演示。主项目添加2个类库项目的参考,然后打开项目依赖关系,我无法取消选中类库。它会弹出一个窗口,'这个依赖项是由项目系统添加的,无法删除',请你提供一个关于如何在我们这边重现你的问题的方法。 –

+0

@Cole:没办法重现它。时不时地发生,随机项目。是的,复选框应该被选中并且灰色,但有时候不是。这是症状,我正在寻找根本原因或解决方案。 –

回答

1

有时我注意到使用导入助手(如ReSharper)可能会导致依赖项目链接到另一个依赖项目的输出而不是依赖项源。

这就是说,如果您要创建一个项目 - 我们称之为'ProjectA' - 并将其链接到库'MyLib',然后创建'ProjectB'并允许ReSharper自动解决依赖关系以链接到'MyLib '您可能会发现ReSharper会实际链接到。\ ProjectA \ Bin \ MyLib.dll文件,而不是。\ Libraries \ MyLib \ MyLib.dll文件。

重建您的解决方案时可能会发生以下情况: * ProjectB恰好构建第一个/更快(因为或许ProjectA有许多更改,但ProjectB只有很少的代码更改)。 * ProjectB然后尝试链接到位于ProjectA的\ bin文件夹中的MyLib.dll,并找不到它。 * ProjectA完成构建并将其依赖项 - MyLib.dll复制到它的\ bin文件夹中。 * ProjectB不会由您手动重建,现在找不到\ ProjectA \ bin \ MyLib.dll问题。

因此,总之,请检查项目中依赖关系的确切来源位置。我猜测有400多个项目已经成为交叉线。
祝你好运!

+1

下一次你看到这种行为,你可以请检查项目依赖关系对话框?请注意,如果问题来自csproj文件被“交叉连接”,这将是一个永久性问题,情况并非如此。无论如何感谢提示,将检查R#是否与它有关。 –

+0

间歇性行为可能是由编译比赛引起的,也可能是由IDE决定您需要重建项目X.(对于我来说,由于某种原因,VS2012偶尔会经历一段时间,决定重建一个库项目,主要项目改变)。 – Monza