最新检查声称自 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)"。
尝试:
- 清理解决方案,关闭解决方案和VS
- 删除 .suo 文件(或 .vs 文件夹)以及 bin 和 obj 文件夹
- 打开 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 文件中 两个位置 中的值.
自从我使用 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)"。
尝试:
- 清理解决方案,关闭解决方案和VS
- 删除 .suo 文件(或 .vs 文件夹)以及 bin 和 obj 文件夹
- 打开 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 文件中 两个位置 中的值.