Visual Studio:项目不是最新的“,因为”AlwaysCreate“被指定”?
我已经从VS2008迁移到VS2010(SP1)的解决scheme。
现在我的一个项目从来没有find和平的时间。 每个版本都有以下输出:
1>------ Build started: Project: PROJ_NAME, Configuration: Release Win32 ------ 1>Build started 19/05/2011 7:59:27 AM. 1>InitializeBuildStatus: 1> Creating "Release\PROJ_NAME.unsuccessfulbuild" because "AlwaysCreate" was specified. 1>ClCompile: 1> All outputs are up-to-date. 1> All outputs are up-to-date. 1>Lib: 1> All outputs are up-to-date. 1> PROJ_NAME.vcxproj -> C:\projFolder.PROJ_NAME.lib 1>FinalizeBuildStatus: 1> Deleting file "Release\PROJ_NAME.unsuccessfulbuild". 1> Touching "Release\PROJ_NAME.lastbuildstate". 1> 1>Build succeeded. 1> 1>Time Elapsed 00:00:00.09 ========== Build: 1 succeeded, 0 failed, 5 up-to-date, 0 skipped ==========
有任何想法吗?
当项目中列出的其中一个包含文件实际上不存在时,我遇到了类似的问题。 我已经删除了该文件,但忘了从项目中删除它。
然后依赖检查器认为该项目不是最新的,但build设者找不到任何东西。
我有两个包含相同文件的项目。 当第二个项目build立时,它再次编译文件,改变“触摸”date时间。 然后为第一个项目设置“AlwaysCreate”标志。
我通过在我的“C:\ Program Files(x86)\ Microsoft Visual Studio 10.0 \ Common7 \ IDE \ devenv.exe.config”文件中打开“CPS”find了这一点,如下面的xml代码片段所示。 在激活的情况下,你可以使用DebugView工具从VS2010获取消息,说明为什么它正在重build你的项目。 为什么这些消息不会进入构build日志是超越我,但无论如何它是。
添加这个:
<system.diagnostics> <switches> <add name="CPS" value="4" /> </switches> </system.diagnostics>
到这里:
<?xml version ="1.0"?> <configuration> <configSections> <section name="msbuildToolsets" type="Microsoft.Build.BuildEngine.ToolsetConfigurationSection, Microsoft.Build.Engine, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> </configSections> <system.diagnostics> <switches> <add name="CPS" value="4" /> </switches> </system.diagnostics> <startup useLegacyV2RuntimeActivationPolicy="true"> <supportedRuntime version="v4.0.30319" />
根据MSDN上的这个线程:
在我的情况下,在VS10这是由于在项目文件夹中缺less(但不符合.h文件,因此没有额外的错误识别)。
快速检查所有项目文件可以在编辑器中打开解决这个问题。
您还必须检查除.h之外的其他文件。 在我的项目Readme.txt错过了。
我将一个解决scheme移到了一个新的文件夹中,每次我创build一个新版本或试图进行debugging时,都会声称组成解决scheme的所有项目都是过时的,即使它们已经构build了它们。
我search了所有的.vcxproj文件,使用CPS = 4的DebugView(请参阅上面的@ Bzzt的答案),并发现它正在寻找其旧位置中的头文件。 由于解决scheme被移动,而不是复制,这些文件不存在。
最终为我解决的是清理解决scheme,并重build一个。 之后,“AlwaysCreate”不再导致它“build设”所有的子项目。 你必须分别清理每个configuration(debugging和释放),但是一旦从干净状态重build,一切都很好。
在我的情况下,它实际上并没有做任何build设,但MSBuild或任何决定的东西都过时了,正在使用一些不再存在的caching文件path。 清理和重build取代了caching,然后像预期的那样构build
我得到了同样的问题。
根本原因:不正确的版本的VS(32位和64位)
解决scheme:切换模式debugging/释放从32位到64位或反向
在Visual Studio 2010中,我通过将多处理器编译(/ MP)取消设置(可惜!),从而消除了多项目解决scheme的虚假重build。 以前,我已经启用它。 在这里find标志:通用属性> C / C ++>常规>多处理器编译。 另外,我注意到,通过单独重build每个项目,我能够消除个别项目的虚假重build。 那么每一个的构build显示每个都是最新的。
为了使这个工作,我只是重命名我现有的输出目录,以重新创build所有中间文件(尝试所有上述接受的答案后)。
过去我在VS2010中使用DebugView来find要删除的文件,但是现在这种方法并没有奏效。 我找不到任何引用丢失的头文件,使用DebugView,在我的任何代码或项目文件的XML。 我也从TFS中检索过时的文件,试图在我的机器上使用它们。
然后,我使用GREP来search整个解决scheme目录,唯一的结果是二进制文件:旧的代码文件* .obj,项目文件的* .pdb和vc100.idb。 我不知道在构build和重build过程中这些文件是如何被修改/replace的,所以我不确定这些文件之前的引用是否声明旧的头文件丢失。
希望这有助于在路上的人,并感谢上面的信息,让我开始!
对于命令行msbuild.exe的构build你可以使用/ verbosity:详细和search输出
- “将编译为”来查找汇编
- “源编译需要”find链接
注意:可以使用msbuild.exe /详细信息将输出传送到文件:详细> output.txt
例如
code.cpp will be compiled as C:\path\to\header.h was modified at 18/02/2016 15:58:31. Outputs for C:\path\to\code.cpp: