最新检查声称自 VS 2019 以来缺少构建输出

Up-To-Date check claims missing build output since VS 2019

自从我使用 Visual Studio 2019 以来,我的一些旧项目每次都会重建,即使没有任何改变。构建输出状态如下:

Up-To-Date check: Project: ..\MyProject.vcxproj, Configuration: Debug Win32

Project is not up-to-date: build output 'd:\mysolution\myproject\debug\' is missing

提到的输出目录确实存在,但是是大写的(D:\MySolution\MyProject\Debug)

在 Visual Studio 2017 年构建同一个项目,MSBuild 正确检测到没有任何更改:

Up-To-Date check: Project: MyProject, Configuration: Debug Win32

All outputs are up-to-date.

有问题的项目是托管 C++ 项目,配置的平台工具集是 "Visual Studio 2013 (v12)"。

尝试:

  1. 清理解决方案,关闭解决方案和VS
  2. 删除 .suo 文件(或 .vs 文件夹)以及 bin 和 obj 文件夹
  3. 打开 VS2019,re-ref dll,更改 .xxproj 文件中的 ref 路径

看到这个

如果问题仍然存在,请检查您是否将输出路径设置为绝对路径。默认情况下,输出目录始终应该是相对路径:

更新:

现在我想我已经找到了问题的原因,您的项目文件中的一些错误扰乱了构建过程。

请检查:

<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
    <ClCompile>
      ...
      <ProgramDataBaseFileName>$(Configuration)\</ProgramDataBaseFileName>
  <!--<ProgramDataBaseFileName>$(Configuration)$(TargetName).pdb</ProgramDataBaseFileName>-->
      <CompileAsManaged>true</CompileAsManaged>
      <PrecompiledHeaderFile />
    </ClCompile>

ProgramDataBaseFileName 的值为$(Configuration)\,即debug\。所以构建过程认为存在一个名为 debug\ 的构建输出 file,但它实际上并不存在。那么Up-To-Date检查就不能正常工作了!

解决方法如下:

因此您可以对该语句进行注释或为其赋予正确的值,例如 $(Configuration)$(TargetName).pdb 而不是 $(Configuration)\,后者是路径而非文件。

<!--<ProgramDataBaseFileName>$(Configuration)\</ProgramDataBaseFileName>--><ProgramDataBaseFileName>$(Configuration)$(TargetName).pdb</ProgramDataBaseFileName> 可以解决这个问题。

注意:由于 ProgramDataBaseFileName 存在于 Debug|win32 和 Release|win32 的 ItemDefinitionGroup 中,您应该更正 .vcxproj 文件中 两个位置 中的值.