Что такое IL Weaving? - PullRequest
       12

Что такое IL Weaving?

48 голосов
/ 10 октября 2008

Я только что видел сообщение Айенде сегодня о PostSharp. Я скачал код и попробовал его, и я подумал, что это был самый крутой и простой в использовании способ обработки АОП, который я видел.

В своем посте Айенде говорит, что PostSharp выполняет свою магию с помощью IL Weaving . Теперь, на некотором абстрактном уровне, я могу понять, что это значит, но я хотел посмотреть, был ли там более подробный ответ. К сожалению, впервые за очень долгое время Google вышел пустым для меня. И поэтому я подумал, что это будет отличный вопрос для StackOverflow (так как я подписывался на блог Джеффа уже пару лет и знал, что этот сайт делает свое дело).

Так что же такое IL Weaving и как его достичь?

Ответы [ 3 ]

23 голосов
/ 10 октября 2008

Плетение относится к процессу внедрения функциональности в существующую программу. Это может быть сделано концептуально на нескольких уровнях:

  • Плетение исходного кода вставит строки исходного кода до компиляции кода
  • IL-ткачество (для .NET) добавляет код в виде инструкций IL в сборке
  • Плетение ByteCode (для Java) работает с файлом класса, см. Эти комментарии по AspectJ

Теоретически вы могли бы пойти еще глубже и переплетаться с исполняемым файлом, скомпилированным с нативными инструкциями, но это добавило бы большую сложность, и я ничего не знаю об этом.

8 голосов
/ 10 октября 2008

IL Weaving похож на ByteCode Weaving. .Net компилируется на промежуточный язык, которым управляет .NET clr. IL Weaving - это в основном анализ и изменение промежуточного языка. Так как это делается на этом уровне, это может быть сделано для всех языков .NET.

4 голосов
/ 10 октября 2008

Может помочь, если вы используете Google MSIL Injection. Эта ссылка с PostSharp , и это хорошо объясняет.

Моя компания недавно купила продукт под названием dynaTrace для диагностики производительности. Он использует инъекцию MSIL для инструментов вокруг методов. По сути, он добавляет код IL перед вашим методом, а затем по времени метод (я уверен, что это гораздо больше).

И здесь - довольно сложное, но хорошее объяснение процесса.

...