我们正在使用一些巨大的Visual Studio 2010解决方案,并在两者之间共享许多静态库项目。在构建了这些解决方案之后,另一个解决方案会抱怨许多(但不是全部)项目已经过时,但实际上建设自然几乎没有,几乎是即时的。
按照this question on debugging MSBuild project dependencies上的步骤操作后,我可以看到以下消息中的许多行,表明项目因“评估指纹不同”而被视为过时:
[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评估指纹以及它们是如何确定的?
答案 0 :(得分: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)|
可以在%ProgramFiles (x86)%\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppBuild.targets
也许可以修改/扩展MSBuild脚本,而不是在lastbuildstate文件中使用SolutionDir。