解决 Visual Studio 2010 AlwaysCreate 重建问题

新手上路,请多包涵

我有一个 C++ 项目,我目前正在从 VS2008 移植到 VS2010。当我构建项目时,Visual Studio 2010 报告构建成功,但如果我随后按 F5 启动调试器,我会被告知项目不是最新的。如果我忽略这个警告,我可以继续调试,但如果我按下 ok,整个项目(数百个源文件)将从头开始重建。输出包含以下内容;

 1>------ Build started: Project: SCCW-VC2010, Configuration: Debug Win32 ------
1>Build started 15/11/2010 14:47:40.
1>InitializeBuildStatus:
1>  Creating "Debug\SCCW-VC2010.unsuccessfulbuild" because "AlwaysCreate" was specified.
1>Midl:
1>  All outputs are up-to-date.
1>ClCompile:
1>  tinedit.cpp
1>  _WIN32_WINNT not defined. Defaulting to _WIN32_WINNT_MAXVER (see WinSDKVer.h)
1>  Automatically linking with sfl504d.lib
1>  Automatically linking with ot1104d.lib
1>c:\program files\rogue wave\stingray studio 10.4\include\toolkit\sectndlg.h(134): warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1>          c:\program files\microsoft visual studio 10.0\vc\include\string.h(105) : see declaration of 'strcpy'
1>  Automatically linking with og1204d.lib
1>  Automatically linking with RWUXThemeD10.lib
1>  profile.cpp
1>  ZOffsetDialog.cpp

半小时后,一旦构建完成,调试器就会启动。我的猜测是消息

创建“Debug\SCCW-VC2010.unsuccessfulbuild”,因为指定了“AlwaysCreate”。

是问题的一部分,但我无法将其与项目设置联系起来。我 在 google 上找到了一些帮助,但到目前为止没有任何帮助。其他人有这个问题并且知道修复吗?

编辑: 根据 Jalf 在下面评论中的建议,我创建了一个新的项目,将我的所有文件导入到该项目中,并且新项目也有同样的问题。具体来说,我复制了以下所有组;

 <ClCompile Include="..\MyDir\MyFile.cpp"/>
<ClInclude Include="..\MyDir\MyFile.h" />
<None Include="res\MyFile.ico" />  (and all similar resources)
<Library Include="..\MyDir\MyFile.lib" />

Edit2: 在浏览完所有标题后,我最终发现 3 不存在。删除它们并在原始项目上进行全部重建似乎已经解决了这个问题。一些提到此问题的博客文章将其称为错误,两天后的浪费时间,我倾向于同意。感谢您提供的答案和评论。

Edit3: 一天后问题又回来了!对项目中的任何文件进行任何编辑都会再次导致完全重建。根据 John Dibling 的回答,该项目确实包含一些静态库,包括 Stingray。我正在放弃 VS2010 并回到 VS2008,因为我有最后期限。有关相关信息,请参阅以下链接;

Visual Studio 2010 总是认为项目已过时,但没有任何改变

http://social.msdn.microsoft.com/Forums/en-US/vcgeneral/thread/38c08137-3bb0-4143-b97f-72d077646318

关联

最终编辑 VS2010 SP1 的发布解决了这个问题,现在构建快速高效。

原文由 SmacL 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.3k
2 个回答

我已经多次遇到这个问题,而且总是令人沮丧。我会告诉你我的问题是什么,但首先我必须问你:

  • 您是在第一次尝试运行之前进行了全部重建,还是只是重建?
  • 一旦你全部重建,如果你没有做任何改变,它会再次要求你重建吗?

我的问题有点复杂。我有自定义构建规则,将 Stingray 的二进制文件从其源目录(它们所在的位置)复制到我的构建树中的目录。二进制文件被标记为依赖项,以便在每次构建之前复制它们以防它们发生变化。

检查的依赖关系查看这些文件的时间戳以查看它们何时更改。如果 blah.lib 在它的源目录中有一个去年 12 月的 mod 日期,那么当它被复制时,它将具有相同的 mod 日期。检查的依赖关系会注意到“嘿,这个文件很旧,我们必须重建它”,然后它会询问我是否要进行完全重建。

有一段时间我只是说“不”,但最终我通过更改自定义构建规则来解决问题,在它完成文件复制后写入一个新的文本文件。这将使新的文本文件成为依赖项,而不是 blah.lib 文件,这让编译器很高兴。

原文由 John Dibling 发布,翻译遵循 CC BY-SA 2.5 许可协议

修改 devenv.exe.config + 使用 DebugView 的 解决方案对我有用(vs2010)。

DebugView 为您列出了丢失的文件。

原文由 Camille Morin 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题