20

我一直在尝试让 Visual C++ 正常工作,但在构建每个项目时都会出现此错误:“这个项目已过时”“你想构建它吗?” 它每次都无法构建。

当我重建时,构建仍然失败,尽管在记录器中我没有注意到任何错误消息,这让我认为它没有正确记录(我正在使用第三方程序进行记录)。

我已按照此处的一些说明进行操作:http: //blogs.msdn.com/b/vsproject/archive/2009/07/21/enable-c-project-system-logging.aspx并启用了日志记录。

我收到此错误:项目不是最新的,因为 "insert file name here".lastbuildstate is missing。请注意,在实际的视觉工作室中,没有任何记录。我无法在谷歌中找到任何关于此的内容。可能是我错误地启用了日志记录,但我觉得这是错误。

4

6 回答 6

28

什么是“tlog”文件?

“tlog”文件由在您进行构建时运行的“Tracker.exe”进程创建,并记录有关构建的一些信息。

该信息将在您下次开始构建时使用并更新,以帮助检测“过时”文件,从而使构建系统仅构建需要重建的位(而不是重新构建所有内容)。

是什么导致“过时”问题?

该问题可能是由*.tlog文件中的不正确或陈旧信息引起的。

可能发生的主要方式有 3 种:

1)您在硬盘上建立了一个项目,然后将目录移动到另一个位置......“tlog”文件记录了旧位置的路径,但是由于您移动了文件,它们不再存在,因此您变得“过时”。

2)您的“项目”引用了指定位置不存在的文件(通常是头文件)。如果您从源代码控制系统中删除了文件,但忘记将其从项目中删除,或者因为您引用了可能“安装”/存在于不同位置的库的头文件,则可能会发生这种情况。通常,开发人员假设文件位于每个人机器上的同一个“位置”......并非总是如此!

3)您已经对项目进行了一些“重构”,并将文件移动到不同的子目录,甚至重命名它们 - 因此“tlog”中记录的文件的路径/名称与磁盘上存在的文件不匹配,即陈旧.

修复它的方法是什么?

执行“Clean+Build”或“Rebuild”并不总能修复它……因为这些操作不会删除“tlog”文件。所以:

  • 删除您可以在解决方案/项目目录中找到的任何“tlog”文件并重新构建。

  • 确保您的项目不引用不存在的文件

如何确定哪些文件不存在?

如果您想确切了解/找出 Visual Studio 认为哪些文件已过期,那么您可以在 Visual Studio 中打开一些诊断信息……并在 DebugView 中查看消息……显示完整路径它正在探测的文件。

devenv.exe.config你输入:

<system.diagnostics>
      <switches>
        <add name="CPS" value="4" />
      </switches>
    </system.diagnostics> 

更多细节

假设您在特定目录(例如 S:\MYPROJECTS)中创建了一个解决方案和一组项目,然后编译并运行/调试它等。

然后,您决定将整个目录移动到驱动器上的其他位置,或者您重构您的项目,例如更改它们的目录名称等。

现在,当您执行“开始调试/F5”时,Visual Studio 会进行依赖检查,并认为您有“过期文件”。

即使您执行“清洁解决方案”或“重建解决方案”......您仍然会收到“文件过期”消息。

看这里:

问题是由在依赖项检查期间查询的“.tlog”文件引起的......当您移动解决方案/项目(以及构建中间文件)时,它们会导致 Visual Studio 构建器混淆。

解决方案是删除所有 .tlog 文件……它们将在您下次构建时重新生成……从那时起,您将不会得到虚假的“过期文件”消息....除非它们真的过时了。

于 2014-02-13T16:26:24.460 回答
28

你应该让 Visual Studio 告诉你它为什么需要重建。Visual Studio 2015内置了对此的支持:

  • 工具(菜单)
  • 选项
  • 项目与解决方案
  • 构建并运行

将 MSBuild 项目构建输出详细程度更改为详细或诊断。

就我而言,它打印了如下消息:

1>------ Up-To-Date check: Project: xyz, Configuration: xyz ------
1>Project not up to date because build input 'C:\ws\Missing.h' is missing.

...并从项目中删除该标题解决了问题。

要在较旧的 Visual Studio 版本中获取此信息,您需要使用 DebugView 并进行修改devenv.exe.config(请参阅 Colin Smith 的回答:https ://stackoverflow.com/a/21759835/1941779 )。请注意,此解决方案不适用于 Visual Studio 2015。

于 2016-02-26T04:00:40.677 回答
5

即使没有任何更改,我也不断收到“项目已过期”错误。我将其追踪到解决方案资源管理器中列出的头文件,该头文件不再被使用并已从项目目录中删除。从 SE 列表中删除它修复了弹出的无关错误消息。

于 2014-11-24T19:30:53.510 回答
4

我也有这个问题。在我的情况下,原因是对文件(通常是头文件)的引用,这些文件在指定的位置不存在。

于 2016-03-13T12:25:26.537 回答
1

我遇到了这个问题,并且使用 colinsmith 发布的诊断技巧,能够将问题追溯到我的 .vcxproj 引用的文件实际上并不存在于任何地方(很久以前它已被删除) ,但从未从项目文件中删除)。

于 2014-03-26T15:27:20.277 回答
0

只是为了后代,我遇到了这个问题,然后意识到我的计算机时钟不知何故跳到了过去大约 48 小时。在我将其设置回当前时间后,警告消失了。

于 2018-11-07T22:26:36.067 回答