Visual Studio 2013解决方案构建不按照构建顺序进行。

28
我在构建我的C#解决方案时遇到了问题。如果我清理解决方案并再次构建它,它将无法构建(我可以这样做几次,然后它就会构建)。它有一个关于Azure项目在工作人员和Web项目之前构建的错误依赖项。此外,大多数解决方案中的项目都在寻找...

WAT070 : The referenced assembly {...}/Worker.dll was not found. 
Please make sure to build the role project that produces this assembly before building this Windows Azure Cloud Service Project.
{...}\VisualStudio\v12.0\Windows Azure Tools\2.2\Microsoft.WindowsAzure.targets 1252    5   AzureProjectName

现在,如果我按照“项目依赖项 - 构建顺序”中列出的顺序构建项目,一切都可以正常工作。此外,在 Azure 项目之前列出了 Web 和 Work 角色。


你能确认Worker是Windows Azure云服务项目的依赖项吗?例如,在依赖项中,当选择Windows Azure云服务项目时,Worker被选中了吗? - Peter Ritchie
是的,情况就是这样。两个角色都显示为云服务项目的依赖项。 - lockwobr
据我记得(现在已经过了一段时间),问题是一个 Azure 项目依赖于另一个 Azure 项目。一旦我从 Web Azure 项目中删除了对 Worker Azure 项目的依赖,它就可以“新鲜地”构建,而无需两次构建或使用一个构建线程。 - lockwobr
6个回答

34

解决方法非常简单。

您可以通过右键单击“项目解决方案”并选择“选择项目生成顺序”选项来设置项目的构建顺序。

图片描述信息

例如,我有一个名为“WpfFormApplicaiton1”的窗体应用程序和两个标题分别为“ClassLibrary1”和“ClassLibrary2”的类。默认情况下,Visual Studio将其设置为以下方式:

图片描述信息

我的要求是,“ClassLibrary2”将被“ClassLibrary1”使用,“ClassLibrary1”将被“WpfFormApplication1”使用。因此,为了满足这一要求,我必须更改默认的项目构建顺序。

进入项目依赖项;选择“ClassLibrary1”,并将“ClassLibrary2”设置为其依赖项。

图片描述信息

同样,选择“WpfFormApplication1”,并将“ClassLibrary1”设置为其依赖项。

图片描述信息

现在,所需的项目构建顺序已设置;由“项目生成顺序”的选项确认。

图片描述信息

此解决方案取自我的博客


6
当你已经尝试了所有方法但仍然无法解决问题时,解决方案并不是那么简单。我们发现项目引用 GUID 的大小写缓存是导致问题的原因,可以参考此页面上的其他答案:https://dev59.com/tmIj5IYBdhLWcg3wRjSr#23699611。 - yoyo

17
您可能遇到的问题是依赖项没有被定义。即使“生成顺序”显示项目构建的顺序,如果您没有在每个项目下面的“项目依赖项”中定义依赖项,msbuild将不知道在移动之前等待依赖项构建完成。需要澄清的是:除非您实际勾选了某个项目是依赖项,否则构建顺序列表中的项目可能会并行而不是按顺序构建。
您可以在“工具->选项->项目和解决方案->构建和运行”下看到默认值为构建多少个并行项目。 “输入图像描述” 因此,为了使构建过程等待依赖项构建,请确保在Project Dependencies->Dependencies下为所需项目检查所有的“Depends on”字段。

1
并行项目的数量不应对此产生影响,否则单 CPU 计算机将无法正确构建。 - Peter Ritchie
1
此外,发帖者确切说明按照“依赖项”中所示的顺序构建是有效的;因此可以假定已经定义了依赖项。 - Peter Ritchie
1
@PeterRitchie - 并行项目设置默认可用核心数,我还没有尝试增加它的数量,但我确信那样做是不起作用的。至于我的回答是否正确,我只是在一个有两个项目的解决方案上尝试了一下,在依赖项的复选框上切换确实会决定它们是否同时构建,或者它们是按顺序构建的。即使构建顺序列表两种方式都相同。 - malexander
1
也许我需要澄清一下我的回答,但是我想表达的是,除非你实际勾选一个项目作为依赖项,否则构建顺序列表中的项目可能会并行构建而不是按顺序构建。 - malexander
2
当我将数字降至1时,它确实构建。仍在尝试找到“缺失的依赖项”,但由于解决方案中有21个项目,这很困难。 - lockwobr
显示剩余2条评论

6

我们遇到了一个问题,项目GUID的大小写不同。编辑项目文件解决了这个问题。我们将所有GUID更改为大写。


您先生,您是我的新英雄!这解决了我们奇怪的间歇性和不一致的“重建解决方案”错误。Visual Studio 必须有一个内部缓存,对 GUID 的大小写依赖不一致。哇。 - yoyo

4
我也遇到了这个问题。在我的情况下,问题是我的解决方案中有几个项目引用。其他项目使用的框架版本与我的工作角色不同(4.5.1与4.5)。

当我将所有项目更改为使用相同的框架版本时,解决方案可以成功构建和运行。

3
我曾遇到过这个问题。在我的情况下,解决方案的项目构建顺序(由VS.Net确定)不正确。具体来说,我的Web项目在其三个依赖项之上。
这三个依赖项在解决方案资源管理器中的“引用”节点下列出。但是,在“项目依赖项”对话框中,Web项目没有依赖于任何项目。
此外,我注意到Web项目有一个小蓝色感叹号,悬停时会显示消息:“Web项目''需要SQL Server Express,在此计算机上未安装。...”根据ASP.NET Web API: Project requires SQL Server Express中的ASP.NET Web Api: Project requires SQL Server Express,调整了web.config后,重新加载项目,感叹号消失了,项目依赖项在“项目依赖项”对话框中得到正确检查,构建顺序也正确反映了这一点。但是,当我作为测试撤销了对web.config的更改时,依赖项并没有被移除,所以我不确定是什么修复了我的问题。
无论如何,在“项目依赖项”对话框中,您都可以手动检查任何未被自动识别为依赖项的项目。

0

检查以确保您的工作文件夹中没有任何残留的旧文件。这些可能会导致与 MSBuild 混淆。为了避免这种情况,只需清除路径中的所有旧文件并获取最新版本。


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