c# - 是否有可以将方法反编译为表达式树并支持 CLR 4.0 的库?

标签 c# .net-4.0 expression-trees

之前的问题问过是否可以将编译委托(delegate)变成表达式树,例如:

当时理智的回答是:

  • 这是可能的,但非常困难,而且没有标准库解决方案。
  • 使用反射器!

但幸运的是,那里有一些非常疯狂/非常伟大的人,他们喜欢逆向工程,他们使我们其他人的困难变得容易。

很明显,可以将 IL 反编译为 C#,就像 Reflector 那样,因此您可以原则上改为以支持所有语句类型的 CLR 4.0 表达式树为目标。这很有趣,因为编译器是否内置对 Expression<> 的特殊支持并不重要。 lambdas 从未扩展为支持在编译器中构建语句表达式树。图书馆解决方案可以填补空白。然后,我们将有一个高级起点来编写类似方面的代码操作,而不必弄乱原始 IL。

如上述链接问题的答案所述,there are some promising signs但我还没有成功地通过搜索找到是否有很大的进展。

那么有没有人完成这项工作,或者做得很好?

注意:CLR 4.0 现已发布。是时候再看看了。

最佳答案

我做了一个支持 .NET 3.5 表达式树的库:
https://github.com/ashmind/expressive

我尝试做内部 API,这样 .NET 4.0 支持就不会那么难添加。
您可以在 IPipeline 实现中添加或更改步骤来实现这一点。

不过,有一件事我还没有完成并且很难完成,那就是对循环的支持。

关于c# - 是否有可以将方法反编译为表达式树并支持 CLR 4.0 的库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2305988/

相关文章:

c# - EF 关系映射与 Fluent API

c# - 无法使用 Win32_DiskDrive 获取系统硬盘序列号

asp.net - 在 C# asp.net 中创建自定义命名空间

.net - 如何指定要从表达式树方法返回的对象?

c# - 从属性中检索表达式并将其添加到表达式树

c# - 如何在 ASP.net 中使用 wkhtmltopdf.exe

c# - 在 switch 中减去一个 public in

C# - 基类中的调用方法

sharepoint - 我可以在 SharePoint 2007 中使用 .NET 4 吗?

c# - 动态为ctor创建委托(delegate)