Visual Studio未识别新代码:调试仍运行旧代码求排查方向
我之前也碰到过这种糟心的情况!除了你已经试过的清理、删除obj/bin、重启VS和电脑这些操作,还有几个容易被忽略的地方可能藏着旧代码,帮你逐一排查:
影子副本(Shadow Copy)
VS调试时会自动把程序集复制到临时影子目录,有时候旧副本没被正常替换。你可以前往%LOCALAPPDATA%\Temp\ShadowCopyCache路径,找到对应项目版本的文件夹并删除里面的文件。另外,也可以检查项目调试设置:右键项目→属性→调试,看看是否勾选了“启用影子复制”,如果开启可以暂时关闭后重新调试。全局程序集缓存(GAC)
如果你的项目是类库,并且之前被安装到GAC中,VS会优先加载GAC里的旧版本程序集。打开管理员命令提示符,执行gacutil /l 你的程序集名称查看是否存在,若有则用gacutil /u 你的程序集名称卸载旧版本。本地NuGet包缓存
要是你的项目引用了自己打包的NuGet包,本地NuGet缓存里的旧版本可能会被VS优先引用。前往%USERPROFILE%\.nuget\packages路径,找到对应包的文件夹,删除里面的旧版本,之后重新生成解决方案。残留的调试进程
有时候停止调试后,后台还有项目进程没完全终止,导致旧代码持续运行。打开任务管理器,找到和项目同名的所有进程(包括后台运行的),强制结束后再重新启动调试。外部依赖的旧程序集
检查项目引用的外部dll或其他本地项目:右键引用项→属性,确认“复制本地”设为True,且“路径”指向最新的生成文件。如果是引用外部dll,手动确认路径里的dll是最新编译版本,替换掉旧文件。VS组件模型缓存
VS的快速启动缓存可能保留了旧的编译信息。删除%APPDATA%\Microsoft\VisualStudio\<你的VS版本号>\ComponentModelCache文件夹内的所有文件,然后重启VS试试。自定义输出/发布目录
如果项目设置了非默认的输出目录(项目属性→生成→输出路径),或者之前发布过到特定文件夹,VS可能加载了这些位置的旧文件。清理自定义输出目录和发布目标文件夹里的所有旧文件,再重新生成。
如果以上方法都没用,还可以尝试创建一个新的解决方案,把现有代码迁移过去——有时候.sln或项目配置文件损坏也会导致这种诡异的缓存问题。
内容的提问来源于stack exchange,提问作者HelplessDev




