什么是IL编织?

时间:2008-10-09 21:57:14

标签: .net postsharp

我今天刚刚看到关于PostSharp的Ayende's post。我下载了代码并试了一下,我认为这是我见过的最酷,最容易使用的方法来处理AOP。

在他的帖子中,Ayende说PostSharp通过 IL Weaving 来实现它的魔力。现在,在一些抽象的层面上,我可以推断出这意味着什么,但我想知道是否有更详细的答案。不幸的是,很长一段时间以来,谷歌第一次出现在我身上。所以我认为这对StackOverflow来说是一个很好的问题(因为我已经订阅了Jeff的博客几年了,并且知道这个网站正在做它的事情)。

究竟IL编织究竟是什么以及它是如何完成的?

3 个答案:

答案 0 :(得分:23)

编织是指将功能注入现有程序的过程。这可以在概念上以多个层次完成:

  • 源代码编织会在编译代码之前注入源代码行
  • IL weaving(for .NET)将代码添加为程序集中的IL指令
  • ByteCode weaving(for Java)适用于类文件,请参阅这些注释wrt AspectJ

理论上你可以更深入地编写一个可执行文件编译成本机指令,但这会增加很多复杂性,我不知道有什么能做到这一点。

答案 1 :(得分:8)

IL Weaving与ByteCode Weaving类似。 .Net编译为由.NET clr运行的中间语言。 IL Weaving基本上是分析和改变中间语言。由于它是在该级别完成的,因此可以为所有.NET语言完成。

答案 2 :(得分:4)

如果您使用Google MSIL Injection,可能会有所帮助。此链接来自PostSharp,它解释得很清楚。

我公司最近购买了一款名为dynaTrace的产品用于性能诊断。它使用MSIL注入来测量方法。基本上它会在你的方法之前添加IL代码并且在方法之后添加它(我相信它还有很多东西)。

here是一个相当复杂但很好的解释过程。