如何确定在构建解决方案时,Visual Studio 为什么会跳过某些项目。

140

我正在调试别人的工作,这个解决方案相当大。 当我尝试构建整个项目时,其中几个项目不会被构建,而是直接跳过。 在构建过程中查看输出窗口会显示:

1> ------ Skipped Rebuild All: Project: pr1lib ------

如何确定为什么跳过了这些构建? 我找不到其他的输出信息。

这是使用VS2008,解决方案由C#和C ++代码组成。


除了提供的答案之外,确保解决方案配置设置中每个应该被清理/构建的项目都处于选中状态(复选框已选中):生成 > 配置管理器:根据需要进行勾选 - Metro Smurf
2
为了解决项目被跳过的原因,请确保在构建设置中添加“/fl”以获取包含原因的msbuild.log文件。例如:“由于假条件而被跳过; (('$(Configuration)' == 'Release') and ('$(Platform)' == 'Any CPU')) 被评估为(('Debug' == 'Release') and ('AnyCPU' == 'Any CPU'))。” - T_D
4
@T_D - 在Visual Studio中,我应该在哪里添加'/fl'?日志会出现在哪里?如果您将此作为答案添加,我会点赞,因为大多数其他答案都是各种随机猜测来解决问题,而不是回答最初的问题,即获取有关问题的更多信息。 - PaulG
@PaulG 请看下面的回答。只需在选项中设置即可。 - Darren
39个回答

115

右键单击解决方案,选择属性,然后选择配置属性。在这里,您可以选择要构建哪些项目。

[编辑]:
参见Kdt的评论:...当我查看配置属性时...项目构建目标配置为“混合平台”,而解决方案设置为构建“任何CPU”。

*当我遇到这个问题时,主项目仅有“任何CPU”,并将子dll设置为“任何CPU”,但是,我已删除了该配置文件,并只留下了'x86'。仅为dll选择x86使其开始工作
[/编辑]


21
我遇到了一个神秘的“跳过构建”问题,在查看配置属性时发现该项目确实标记为构建。然而,该项目的构建目标配置为“Mixed Platforms”,而解决方案设置为构建“Any CPU” —— 更改这些设置后问题得以解决。 - kdt
4
在我的情况下,虽然所有的项目和解决方案都被设置为“任何 CPU”,但一个项目被跳过了。只有当我把解决方案设置为“混合平台”,然后再设置回“任何 CPU”时,它才会构建。查看解决方案文件在更改前后的差异,发现从 {784BDC39-5783-4128-956E-99EA062FA8FB}.Debug|AnyCPU.ActiveCfg = Debug|AnyCPU 变成了 {784BDC39-5783-4128-956E-99EA062FA8FB}.Debug|AnyCPU.ActiveCfg = Debug|Any CPU。唯一的区别是在行末添加了一个空格,即 "Any" 和 "CPU" 之间多了一个空格。 - Simon Elms
10
在我的情况下,所有的项目都被设置为"Any CPU",通过移除这些项目(移除项目不会导致文件被删除),然后将它们重新添加到解决方案中来解决了问题。 - Hamid Mayeli
这个解决方案对我在Visual Studio 2019中起作用。由于C#和C++项目的混合,只有C++项目存在问题。手动选择C++项目上的“重建”可以重新构建源代码,但是“生成解决方案(F7)”则不行。这个答案指引了我正确的方向(谢谢!)=> 所有的C++项目都没有在解决方案中配置为构建。VS2019可能会关闭C++的构建,可能是出于效率考虑,也可能是由于“平台”设置。 - AlainD
我有一个定制的csproj文件,其中没有<Configuration Condition="'$(Configuration)' == ''">Debug</Configuration>。在配置管理器中,我发现了不匹配的问题:它不再自动添加发布配置。解决方法是添加<dummy Condition="'$(Configuration)' == 'Release'"></dummy> - jifb

73

构建、重新构建和清理操作被跳过了。卸载和重新加载没有帮助,重启Visual Studio也不行。

一旦我将项目从解决方案中删除并重新添加,就不再被跳过了。要删除它,在“解决方案资源管理器”中右键单击该项目 > 移除 > 确定。要重新添加它,在“解决方案资源管理器”中右键单击解决方案 > 添加 > 现有项目,然后选择您的项目。


11
请记住,您将需要重新添加所有项目引用到该项目中。 - Joseph
2
他的意思是,您将不得不将此项目重新添加为所有需要它的其他项目的引用。或者,您可以使用版本控制系统的“还原”命令来还原所有项目文件中的更改,并仅保留对解决方案文件的更改。删除项目并将其重新添加到解决方案中会导致解决方案文件中对该项目的所有提及被移动到末尾,这似乎是修复问题的神奇咒语。 - Mike Nakis
@MikeNakis 我只有一个解决方案中的项目,刚好发生在我身上。这修复了问题。 - KulaGGin

54

我刚刚遇到了同样的问题——"卸载项目"和"重新加载项目"解决了这个问题!


1
我有同样的问题,卸载/重新加载确实有效,但问题似乎会再次出现,当它发生在一堆项目上并且你必须逐个进行卸载/重新加载时非常烦人... 有人知道是否有办法完全避免这种情况吗? - Liron
当我尝试构建时,Visual Studio在输出窗口中错误地报告项目已经是最新的,这个方法解决了我的问题。 - Kevin Laity

36

重新启动Visual Studio即可解决问题。


1
我不知道为什么我没有首先尝试这个,但我首先尝试了被接受的答案,然后卸载/重新加载项目,最后只是重新启动了VS。它奏效了,真是出乎意料。有时候显而易见的解决方案会被忽略!使用VS 2017社区版。 - Lauren Moylan

13

我的解决方案与之前提到的相同:删除 -> 添加现有项目

但是此解决方法意味着项目间引用将消失

为避免需要重新添加引用: 并且 如果你使用版本控制系统 如GIT或TFS等,可以通过以下步骤实现目标:

  1. 确保在操作之前所有更改已提交/签入

  2. 浏览所有项目,从解决方案中删除它们并添加现有项目

  3. 请注意,.sln文件已更改

  4. 保留新的.sln文件,但使用版本控制系统撤消对所有.csproj文件的更改


11
如果配置是x64,而且x64编译器未安装,它将跳过该项目。

1
+1 天才。您可以在此处找到SP1:http://www.microsoft.com/download/en/details.aspx?id=10986 - ashes999
当未安装x64编译器时,您甚至无法选择x64。 - Calmarius
解决方案和项目配置可以定义并使用名为“x64”的条目。处理器架构的第三个ddl(平台目标-在生成属性页面的中间部分)是不可用的。 - StingyJack

10

我有一个奇怪的问题可能值得记录在这里作为其他可能性之一...

我把一个共享项目添加到我的解决方案中,其中包含了两个或三个其他项目中使用的代码。如您所知 - 共享项目只是代码,不是传统意义上的项目...你不能“构建”共享项目,它只是嵌入到其他项目中,并在那里构建。

但一些奇怪的事情发生了,我的解决方案文件被更新了,好像共享项目是需要构建的自己的东西。我猜想,如果任何时候我尝试构建,而且我没有更改共享项目中的代码,则会认为“没有变化,跳过构建”

我在solution.sln文件中找到了共享项目:

Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Api.Common", "Api.Common\Api.Common.shproj", "{EC580471-D78A-4509-AC46-BD565553AD60}"

这很好。但不好的是,这个项目也出现在GlobalSection(ProjectConfigurationPlatforms) = postSolution中:

    {EC580471-D78A-4509-AC46-BD565553AD60}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
    {EC580471-D78A-4509-AC46-BD565553AD60}.Debug|Any CPU.Build.0 = Debug|Any CPU
    {EC580471-D78A-4509-AC46-BD565553AD60}.Release|Any CPU.ActiveCfg = Release|Any CPU
    {EC580471-D78A-4509-AC46-BD565553AD60}.Release|Any CPU.Build.0 = Release|Any CPU

我从我的.sln文件中删除了这四行,现在一切似乎又恢复正常了。


1
太棒了!就是这样!我从.sln文件中删除了以“Global”开头且直到“EndGlobal”为止的所有行,然后它又可以工作了。 - Ted
1
当我将它们移除后,在构建解决方案时它们会自动添加回来,但是它们会以 Debug|Any CPU 相等的方式返回所有四个条目。但这确实解决了我的问题。 - EspressoBeans
这也是我的问题。我删除了与共享项目GUID相关联的所有构建配置条目,然后编译再次正常工作。非常令人困惑。 - Zoop
N/A 对于 VS2019 (16.11.21) - 它不会为共享项项目创建构建配置。 - AntonK
这个解决方案对我很有效。虽然我不确定它们是如何出现在项目配置平台部分的。 - Ognjen Babic

7

我刚遇到了这个问题,通过删除顶层文件夹中隐藏的.vs文件夹后,问题得以解决。 重新启动Visual Studio之后,一切都恢复正常。


5
首先要做的是诊断为什么构建会跳过项目。因此,在Visual Studio中将详细程度更改为详细,以获得详细的构建输出。

输入图像描述


16
很遗憾,详细性设置并没有起到帮助作用。输出仍然只显示“跳过项目”,没有解释原因。 - PaulG

5

Visual Studio 2008可能是因为未安装64位编译器而出现问题。

控制面板 --> 程序和功能 --> Microsoft Visual Studio 2008专业版 --> [双击]

在Visual Studio对话框中

下一步 --> 添加/删除功能 --> (下方)Visual C++ --> (选择)x64编译器和工具


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