Visual Studio项目过期了。

21

我一直在尝试让Visual C++正常工作,但是每次构建项目时都出现“此项目已过期”、“是否要构建它?”的错误提示,无法成功构建。

重新构建后,构建仍然失败,虽然在记录器中没有看到任何错误信息,这让我觉得它没有正确记录(我正在使用第三方程序进行记录)。

我按照此处的一些说明,启用了日志记录。

但我又遇到了这个错误:项目不是最新的,因为缺少“插入文件名”.lastbuildstate文件。请注意,在实际的Visual Studio中,并未记录任何内容。我在谷歌上找不到这方面的任何资料。可能是我错误地启用了日志记录,但我认为这就是错误的原因。


1
那是一个重复的问题,如果我没记错的话。请彻底搜索 Stack Overflow。 - Bartek Banachewicz
我已经找了3个小时,但是没有找到任何有用的东西。如果你找到了可以帮助我的东西,请指引我。 - user1795223
1
另外请注意,该项目可能已过时,因为它从未成功构建,导致构建失败的原因与lastbuildstate或日志记录无关。项目过时不是错误,只是一个注意点。您可以在Visual Studio选项中禁用该对话框,但这并不能使您的项目神奇地编译,也不能解决日志记录问题。 - Mooing Duck
这也可能是由于解决方案中存在已经不存在于磁盘上的文件,因此日期时间戳检查失败并且始终认为其已过期所导致的。 - Lodle
当我将一个项目文件夹从一台机器复制到另一台机器,并尝试以调试模式构建和运行它时,我一直收到这个“错误”。启用诊断日志记录后发现指定了AlwaysCreate,许多其他人似乎在缺少头文件时看到了这个问题,但我的项目非常简单,只有一个头文件和一个主cpp文件,所以对我来说不可能是这种情况。因此,也许由于这是在具有(潜在)不同的Visual Studio 2010 Express下载的不同机器上编译的,因此可能缺少其中一个外部依赖项(工作场所太吝啬了,不愿支付)。 - OOhay
显示剩余2条评论
6个回答

31

您应该让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://dev59.com/EWUp5IYBdhLWcg3w5KrV#21759835)。 请注意,此解决方案不适用于Visual Studio 2015。


1
你知道如何使用VS2015进行调试吗? - Xiao Jia
3
这个回答没有掌握要点:如何从那个巨大的日志中找出是什么让VS认为该项目已经过时。应该在详细的日志中寻找什么关键词或短语,这才是关键。 - Pavel P
添加了一个日志消息示例。 - CrouZ
1
你可能需要重复多次。我有两个位图资源已经被删除,但仍然列为项目的一部分。第一个构建日志列出了其中之一,在修复它并构建两次后,我得到了位图2的日志消息。 - Dave S
1
当我尝试这个时,日志文件非常大,我花了一些时间向上滚动输出以寻找相关的消息。结果发现,“更新检查”就在日志的顶部,这是合理的,因为这是它做的第一件事情。像 @CrouZ 一样,这指向一个标题已经从我的硬盘中删除但没有从项目文件中删除的问题。 - Michael Rodby

28

什么是“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”文件…..下次执行构建时,它们将被重新生成…..从那时起,您将不会收到虚假的“过时的文件”消息……除非它们真的已过期。


5

我也遇到了“项目已过期”错误,尽管没有进行任何更改。我追踪到一个在Solution Explorer中列出的头文件,它不再被使用并已从项目目录中删除。将其从SE列表中移除可以修复弹出的无关错误消息。


4

我也遇到过这个问题。 在我的情况下,原因是引用了文件(通常是头文件),但指定位置的文件不存在。


1
我遇到了这个问题,使用colinsmith提到的诊断技巧,成功地追踪到问题源于我的.vcxproj文件引用了一个实际不存在的文件(它早已被删除,但从未从项目文件中移除)。

0

仅供记录,我也遇到了这个问题,后来发现我的电脑时钟不知何故已经往前跳了大约48小时。调整回当前时间后,警告就消失了。


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