DotPeek开启显示编译器生成代码后仍无法查看异步状态机代码求助
解决DotPeek查看async/await编译器生成状态机的问题
我来帮你梳理下这个问题的解决思路,结合DotPeek的反编译逻辑,你遇到的情况其实是它的默认行为导致的,以下是具体的排查和解决步骤:
1. 正确找到编译器生成的状态机类
DotPeek默认会把编译器生成的async/await状态机反还原成原始的async/await语法,所以直接打开SomeClassWithAwait类看到的是你写的原始代码,这是正常的。你需要:
- 在Assembly Explorer里展开你的类库程序集,找到
SomeClassWithAwait类下面的嵌套类(通常命名格式是SomeClassWithAwait+<MethodAsync>d__0,具体数字可能不同) - 双击这个嵌套类,就能看到编译器生成的完整状态机代码了
2. 调整反编译设置,强制不还原async/await语法
如果你希望在查看原方法时直接看到状态机代码,而不是还原后的async/await,可以修改DotPeek的设置:
- 点击顶部菜单的
File > Settings(或者按Ctrl+Alt+S) - 切换到
Decompiler选项卡 - 找到Async/Await相关的设置,取消勾选类似
Restore async/await syntax(还原async/await语法)的选项 - 点击
Apply后,重新反编译你的类,此时打开MethodAsync方法就能看到状态机的代码了
3. 清理DotPeek缓存,确保设置生效
有时候旧的反编译缓存会导致新设置不生效,你可以:
- 点击
File > Clear Cache - 等待缓存清理完成后,重新加载你的类库程序集,再尝试查看代码
4. 确认加载的是最新编译的程序集
确保你在DotPeek中加载的是你重新编译后的dll文件:
- 右键Assembly Explorer中的程序集,选择
Reload Assembly - 确认路径指向的是最新编译生成的dll(比如bin/Debug或bin/Release下的最新文件)
内容的提问来源于stack exchange,提问作者Sergey
相关产品推荐
相关产品推荐

