使用GitHub Desktop回退提交后,VS2022调试.NET4.7.2项目持续出现System.BadImageFormatException异常
使用GitHub Desktop回退提交后,VS2022调试.NET4.7.2项目持续出现System.BadImageFormatException异常
看起来你碰到的这个问题是Costura(就是Fody生态里用来把依赖打包进主程序集的插件)引发的类型重复冲突,而且和GitHub Desktop回退提交后本地编译缓存、项目状态紊乱脱不了干系——VS修复只是临时清了某些缓存,但没解决根因。下面给你几个针对性的解决方案,比每次折腾VS安装器高效多了:
彻底清理项目编译缓存与输出目录
先把Visual Studio完全关掉,然后手动删掉项目根目录下的bin和obj文件夹(这俩是编译生成的输出和中间文件,回退提交后很可能残留了旧版本的重复类型文件)。重新打开VS,选择「生成解决方案」而非「生成项目」,再尝试调试。检查Costura的NuGet包与配置
你的项目应该是用了Costura.Fody这个NuGet包对吧?回退提交可能导致包版本不一致或者配置重复:- 打开NuGet包管理器,先卸载Costura.Fody,再重新安装对应版本(要是项目确实需要它的话);
- 检查项目里的
FodyWeavers.xml文件,确保里面没有重复的<Costura />配置节点。
清理Visual Studio的本地缓存
VS的用户级缓存有时候会残留旧的编译信息,哪怕项目文件更新了也会捣乱:- 关闭所有VS窗口,打开命令提示符,执行
devenv /cleanuserprofile; - 或者手动删除
%LOCALAPPDATA%\Microsoft\VisualStudio\17.0_xxxx\ComponentModelCache文件夹(17.0对应VS2022,后面的xxxx是你的VS实例ID,直接找ComponentModelCache文件夹即可)。
- 关闭所有VS窗口,打开命令提示符,执行
清理Git本地未跟踪文件
回退提交后,本地可能残留了一些未被Git跟踪的旧编译产物(比如bin/obj里的文件,哪怕.gitignore忽略了也可能没清干净):- 打开项目目录的Git Bash(或终端),先确认没有需要保留的未跟踪文件,然后执行
git clean -xdf; - 执行完后重新编译项目,再尝试调试。
- 打开项目目录的Git Bash(或终端),先确认没有需要保留的未跟踪文件,然后执行
如果上面的方法都不管用,那你可以打开项目的.csproj文件,搜索Costura或者AssemblyLoader相关的节点,看看有没有重复的引用或导入项,手动删掉重复的部分就行。
备注:内容来源于stack exchange,提问作者vdmua
相关产品推荐
相关产品推荐

