【问题标题】:Visual Studio Project out of dateVisual Studio 项目已过期
【发布时间】:2013-02-04 19:43:32
【问题描述】:

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

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

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

我收到此错误:项目不是最新的,因为“在此处插入文件名”.lastbuildstate 丢失。请注意,在实际的视觉工作室中,没有任何记录。我无法在谷歌中找到任何关于此的内容。可能是我错误地启用了日志记录,但我觉得这是错误。

【问题讨论】:

  • 这是个骗子,IIRC。彻底搜索。
  • 我已经找了 3 个小时,我找不到任何帮助。如果您发现了可以提供帮助的东西,请指导我。
  • 如果您打开 Visual Studio 并尝试手动编译您的项目/解决方案,是否会出现任何错误? (这是日志记录问题还是您的代码问题?)
  • 另外,请记住,该项目已过时可能是因为它从未成功构建,并且它未能构建的原因与 lastbuildstate 或您的日志记录无关。过时的项目不是错误,只是一个兴趣点。您可以在 Visual Studio 选项中禁用该对话框,但它不会使您的项目神奇地编译,也不会修复您的日志记录问题。
  • 这也可能是由于您的解决方案中的文件不再存在于磁盘上,因此日期时间戳检查失败并始终认为其已过时

标签: c++ visual-studio-2010 visual-studio visual-c++


【解决方案1】:

什么是“tlog”文件?

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

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

什么导致“过时”问题?

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

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

1) 你在硬盘上建了一个项目,然后把目录移到另一个位置……“tlog”文件记录了旧位置的路径,但是因为你移动了文件,它们不再存在,因此您会“过时”。

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

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

有什么办法解决?

执行“清理+构建”或“重建”并不总能解决问题……因为这些操作不会删除“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 文件......它们将在您下次构建时重新生成......从那时起,您将不会得到虚假的“out of日期文件”消息....除非它们确实已过时。

【讨论】:

    【解决方案2】:

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

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

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

    在我的例子中,它打印了这样一条消息:

    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。

    【讨论】:

    • 你知道如何用VS2015调试吗?
    • 这个答案没有抓住重点:如何从那个巨大的日志中找出是什么让 VS 认为该项目已过时。在那份详细的日志中寻找什么,什么单词或短语?...这就是重点。
    • 添加了日志消息示例。
    • 您可能需要多次重复此操作。我有 2 个位图资源已被删除,但仍被列为项目的一部分。第一个构建日志列出了其中一个,在修复它并构建两次之后,我得到了位图 2 的日志消息。
    • 当我尝试这个时,日志文件很大,我花了一些时间向上滚动输出以查找相关消息。事实证明,“最新检查”就在日志的顶部,事后看来这是合理的,因为这是它做的第一件事。与@CrouZ 一样,它指向一个已从我的硬盘驱动器中删除但未从项目文件中删除的标头。
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          【解决方案6】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-06-13
            相关资源
            最近更新 更多