.net - studio - ¿Qué es IL Weaving?
postsharp visual studio 2015 (3)
Tejer se refiere al proceso de inyectar funcionalidad en un programa existente. Esto se puede hacer conceptualmente en varios niveles:
- El tejido de código fuente inyectaría líneas de código fuente antes de compilar el código
- IL weaving (para .NET) agrega el código como instrucciones IL en el ensamblado
- ByteCode weaving (para Java) funciona en el archivo de clase, vea estos comentarios wrt AspectJ
En teoría, podrías ir más profundo y tejer con un ejecutable compilado según las instrucciones nativas, pero esto agregaría mucha complejidad y no estoy al tanto de nada que haga esto.
Acabo de ver la publicación de Ayende hoy sobre PostSharp. Descargué el código y lo probé, y pensé que era la forma más genial y más fácil de manejar el AOP que he visto.
En su publicación, Ayende dice que PostSharp logra su magia a través de IL Weaving . Ahora, en cierto nivel abstracto, puedo deducir lo que eso significa, pero quería ver si había una respuesta más detallada. Desafortunadamente, por primera vez en mucho tiempo, Google salió vacía para mí. Así que pensé que sería una gran pregunta para StackOverflow (ya que hace un par de años que me suscribí al blog de Jeff y sabía que este sitio estaba haciendo lo suyo).
Entonces, ¿qué es exactamente IL Weaving y cómo se logra?
IL Weaving es similar a ByteCode Weaving. .Net compila a un lenguaje intermedio que es ejecutado por .NET clr. IL Weaving básicamente analiza y altera el lenguaje intermedio. Dado que se realiza en ese nivel, se puede hacer para todos los lenguajes .NET.
Podría ayudar si aplica Google MSIL Injection en su lugar. Este enlace es de PostSharp y lo explica bien.
Recientemente, mi compañía ha comprado un producto llamado dynaTrace para el diagnóstico de rendimiento. Utiliza la inyección MSIL para instrumentar los métodos. Básicamente agrega código IL antes de su método y luego de cronometrar el método (estoy seguro de que hay mucho más que eso).
Y aquí hay una explicación bastante involucrada pero buena del proceso.