0

我们正在使用一些庞大的 Visual Studio 2010 解决方案,它们之间共享大量静态库项目。在构建这些解决方案中的任何一个之后,另一个解决方案会抱怨许多(但不是全部)项目已经过时,尽管实际上构建自然几乎没有任何作用并且几乎是即时的。

按照这个问题上的步骤调试 MSBuild 项目依赖项后,我可以看到以下多行消息,表明项目由于“不同的评估指纹”而被认为已过时:

[8444] Project not up to date because the last build has different evaluation fingerprint. 
[8444] devenv.exe Information: 0 : 
[8444] Project not up to date because the last build has different evaluation fingerprint. 
[8444] devenv.exe Information: 0 : 

在试图找出 MSBuild 评估指纹是什么、它们来自哪里,或者是什么可能导致它们像这样关闭时,我完全空白。

考虑到它们的剪切大小、配置要求的复杂性以及我们的日程安排中没有足够的时间来清理这样的小麻烦,创建新的项目文件是不可能的。

什么是 MSBuild 评估指纹,它们是如何确定的?

4

1 回答 1

2

我假设您使用的是 C++?问题是用于构建项目的解决方案目录被保存到“* .lastbuildstate”文件中。它只是一个纯文本文件,如下所示:

#v4.0:v100:false
Debug|Win32|C:\MyPath\ToSolution\|

第二行用作项目评估指纹。

第一行包含以下信息(参见 Microsoft.CppBuild.targets 中的第 246 行) #$(TargetFrameworkVersion):$(PlatformToolSet):$(EnableManagedIncrementalBuild)

第二行(参见 Microsoft.CppBuild.targets 中的第 38 行) $(Configuration)|$(Platform)|$(SolutionDir)|

Microsoft.CppBuild.targets 可以在以下位置找到%ProgramFiles (x86)%\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppBuild.targets

也许可以修改/扩展 MSBuild 脚本以不使用 lastbuildstate 文件中的 SolutionDir。

于 2013-12-03T08:58:45.587 回答