¿Es posible insertar el código IL en el método C#?Cómo insertar el código CIL en C#
Respuesta
Éstos son algunos consejos
http://www.codeproject.com/KB/dotnet/CLRMethodInjection.aspx
Si línea IL (con el mismo espíritu de ensamblado en línea con el apoyo de los compiladores de C y C++) es lo que estás buscando, éste puede se logrará mediante la compilación de ida y vuelta posterior a la compilación.
Mike Stall vez ha escrito a tool for that, por lo que yo sé que es bastante maduro:
Aparte de eso, se puede usar F # que soporta Inline IL.
La herramienta que necesita se llama Cecil y es parte del proyecto Mono.
Puede obtener más información al respecto aquí: http://www.mono-project.com/Cecil
Tomado de la página web anterior:
Cecil es una librería escrita por JB Evain (http://evain.net/blog/) para generar e inspeccionar los programas y las bibliotecas de la Formato ECMA CIL. Tiene soporte completo para genéricos y admite algunos formatos de símbolos de depuración.
En inglés simple, con Cecil, puede cargar conjuntos gestionados existentes, examinar todos los tipos contenidos, modificarlos sobre la marcha y guardar de nuevo en el disco el conjunto modificado.
DynamicMethod es la manera liviana de lograr esto en tiempo de ejecución.
El compilador Microsoft C# no es compatible con la inyección de IL en tiempo de compilación, pero una herramienta de creación de código podría hacerlo como un paso posterior a la compilación.
Acabo de posted a utility que permite que los cuerpos completos de la función C# se reemplacen automáticamente con IL en línea, usando un atributo personalizado. Al igual que las utilidades similares, esto funciona mediante el viaje de ida y vuelta de ILDASM/ILASM, que se puede configurar como un paso posterior a la construcción. La herramienta también ajusta el PDB para preservar el paso único y establecer puntos de corte en las instrucciones individuales de IL en el depurador. Es diferente de algunos de los otros forros IL ida y vuelta en el que (sólo) sustitutos de los cuerpos de las funciones enteras, así:
class MyClass
{
[ILFunc(@"
.locals init ([0] int32 i_arg)
ldc.i4.3
ret
")]
int MyFunc(int i_arg)
{
return 3;
}
};
Para los métodos altamente rendimiento crítico, he intentado usar DynamicMethod
a mejorar compiler- generó IL, pero descubrió que el beneficio se pierde debido a la sobrecarga de llamadas del delegado. Inline IL proporciona el beneficio de IL sintonizado a mano sin ese golpe, suponiendo que no hay personalizaciones en tiempo de ejecución para las que realmente se necesita DynamicMethod
.
El código fuente completo se encuentra en http://www.glennslayden.com/code/c-sharp/inline-il
- 1. Stringbuilder en CIL (MSIL)
- 2. ¿Visualizarán VB.NET y C# CIL lo mismo?
- 3. ¿Hay alguna manera de ver el código nativo producido por theJITter para C#/CIL dado?
- 4. ¿Cómo traducir "por defecto (SomeType)" de C# a CIL?
- 5. Ventajas del conocimiento de CIL en .NET
- 6. Learning CIL
- 7. Desarmar programáticamente CIL
- 8. CIL stack exchange instruction
- 9. .NET CIL ¿Llamada o CallVirt?
- 10. ¿Cómo llamas al código Python desde el código C?
- 11. Cómo probar el código C
- 12. Cómo "multiprocesar" el código C
- 13. CIL, CLS y CTS en .NET
- 14. cómo ver el código optimizado en c
- 15. Insertar imagen en código con Visual Studio
- 16. ¿Cómo incrusto etiquetas Mercurial en mi código C/C++?
- 17. ¿Cómo convierto el código Java en código C#?
- 18. ¿Hay alguna forma de insertar el código de ensamblaje en C?
- 19. El mejor lugar para insertar el código de Google Analytics
- 20. ¿Dónde insertar el código para el inicio de la aplicación?
- 21. Insertar vector de valor en el mapa en C++
- 22. C# @ "" ¿cómo puedo insertar una pestaña?
- 23. Cómo analizar y modificar programáticamente el código C#
- 24. Usar el código Python en C/C++
- 25. C++ insertar en el vector en la posición conocida
- 26. Insertar imagen en el archivo xml usando C#
- 27. ¿Hay una manera simple de obtener todas las variables locales en el marco de pila actual en C# (o CIL)
- 28. Insertar código de programación en un documento de Lyx
- 29. Cómo puedo insertar elementos en una cola en C#
- 30. ¿Hay algún ejemplo de compilación de código CIL dentro de un proyecto de Visual Studio?
¿No ha encontrado ningún atributo ILFunc en su lib. – Denis
@Denis No creo que estuviera proporcionando una lib. Es el código fuente, y hay dos archivos en la página web. El segundo (desplazarse hacia abajo más allá del texto adicional) contiene la definición de ILFunc 'Attribute'. –
¡Seriamente brillante! ¡Gracias! – Thought