c# - 如何反编译包含 lambdas 的 .NET dll 以便构建
问题描述
我的生产系统开始出现问题。该代码面向 .NET Framework 4.5.2。我有以下问题:
- 没有正式的构建和部署过程。所以不知道部署了哪个版本的代码
- 从将可用源与生产中的反编译 DLL 进行比较来看,我似乎在任何分支上都没有匹配项。看起来有人在源代码控制之外制作了一个版本并手动部署了它
- 从事该系统工作的人几年前就离开了公司,而离开的人对系统一无所知
我一直在尝试通过反编译 dll 来恢复代码,并计划添加日志记录和热交换 dll 以跟踪问题。
我对一些 dll 有问题(11 个项目中有 3 个项目,总共可能有 10 个类)。对于某些类,反编译器会生成许多如下所示的代码:
[AsyncStateMachine(typeof(<AcceptSalesAgentLeadAssignment>d__9)), HttpPost]
public Task<bool> AcceptSalesAgentLeadAssignment(SalesAgentWithLeadAssignmentsUpdateModel leadAssignment, string accountGuidAuth)
{
<AcceptSalesAgentLeadAssignment>d__9 d__;
d__.leadAssignment = leadAssignment;
d__.accountGuidAuth = accountGuidAuth;
d__.<>t__builder = AsyncTaskMethodBuilder<bool>.Create();
d__.<>1__state = -1;
从我在网上可以找到的内容来看,这与原始源代码中存在的匿名函数有关。这本身不会那么糟糕,但问题是这段代码是不可构建的。它实际上会产生数千个错误,例如:
The name d__9 does not exist in the current context.
我尝试了以下工具:JetBrains DotPeek、dnSpy、Telerik JustDecompile、redgate 的 .NET Reflector。他们都产生了这个不可构建的代码。
我不需要生成的代码完全可读。我只需要能够生成功能上与生产中相同的 dll,这样我就可以逐步添加日志语句并跟踪问题。我知道反编译器无法计算出人造代码过去的样子,但它至少应该能够产生逻辑上等效且可构建的东西。有没有办法做到这一点?
解决方案
感谢 Andy 的评论,我被指向了一个名为 IL Spy 的工具。它生成了一个非常干净且几乎可构建的代码。由于某种原因,它无法处理 using 语句,并弄乱了开关。但这很容易解决。谢谢安迪。
推荐阅读
- python - numpy distutils 在 setup.py 中指定 intel fortran 编译器
- django - 下拉选项值不保存
- python - python 脚本不会随着 sys.exit() 停止
- powershell - 如何选择字符串多行?
- javascript - 为什么我看不到函数“Data.Feature.setId(id)”?谷歌地图 JavaScript API
- flutter - android:label 属性不影响颤振应用程序名称
- amazon-web-services - 安装了 Mosquito 的 AWS EC2 不起作用
- xml - 针对外部模式的 XML 验证
- java - 数据表不显示值
- python - 使用串行将浮点数从arduino发送到python