【问题】VS 2026 C++ 控制台项目:改完代码后第一次生成只编译不链接,运行的是旧 exe

【问题】VS 2026 C++ 控制台项目:改完代码后第一次生成只编译不链接,运行的是旧 exe

■ 环境

- Windows 11(内部版本 26200)

- Visual Studio Community 2026,版本 18.10.2

- 平台工具集 v145,MSVC 14.51.36231(cl 19.51.36260)

- Windows SDK 10.0.26100.0

- VS 安装在非系统盘:D:\visual studio

- 项目:VS 模板「控制台应用」,只有一个 hello.cpp,配置 Debug | x64

- 解决方案是新格式 .slnx

■ 现象

1. 新建项目,Ctrl+F5 运行 → 正确打印 hello world

2. 把字符串改成别的内容,Ctrl+F5 → 打印的仍然是 hello world(旧内容)

3. 不改代码,再按一次 Ctrl+F5 → 这时才打印出新内容

即:链接永远比编译慢一拍。每改一次代码,需要生成两次才能看到效果。

4. 「重新生成解决方案」(Rebuild) 每次都正常

5. 全程没有任何报错和警告,「输出」窗口显示「生成: 1 成功,0 失败」,

并且照常打印 "Project1.vcxproj -> D:\...\Project1.exe" 这一行

■ 硬证据

- 改完代码生成后:hello.obj 时间戳更新了,读取其二进制内容,新字符串确实在里面(编译成功)

- 同时 Project1.exe 时间戳和内容完全没有变化(链接没执行)

- 详细日志(/v:detailed)里 Link 任务的原文:

任务"Link"

D:\...\PROJECT1\PROJECT1\X64\DEBUG\HELLO.OBJ 的输出

D:\...\PROJECT1\X64\DEBUG\PROJECT1.EXE

D:\...\PROJECT1\X64\DEBUG\PROJECT1.PDB

所有输出均为最新。

而此刻 hello.obj 比 Project1.exe 新 14 秒(obj 00:56:35 / exe 00:56:21)

- 用命令行 MSBuild 直接构建也能复现,加 /nr:false(禁用节点复用)依然复现

→ 说明不是 IDE 界面的问题,在生成系统这一层

■ 已排除

- system("pause") 导致进程驻留锁住 exe(已删除该行,且确认无进程占用 exe)

- .vs 缓存、x64 中间目录残留(全部删除后从零重建,仍复现)

- .slnx 里平台名写 x86 而项目是 Win32(用的是 x64 配置)

- MSBuild 节点复用(/nr:false 仍复现)

- 增量链接(设 LinkIncremental=false 仍复现)

■ 我目前用的绕法

在 .vcxproj 的 Microsoft.Cpp.targets 导入之后加:

链接前删掉旧 exe,链接器就无法判定"最新",必然重新链接。

实测有效,且不影响编译的增量性(不改代码时 hello.obj 不会重新编译)。

■ 想请教的问题

1. 这是 VS 2026 / v145 工具集的已知 bug 吗?有没有官方 issue 或修复版本?

2. 有没有比"每次删 exe"更正规的解法(某个设置或属性)?

3. 这个现象是否和「解决方案用 .slnx 新格式」或「VS 装在非系统盘」有关?非常感谢您的付出!!!