c# - soporta - optimizacion de consultas sql
Ejecutando scripts dentro de C# (8)
Quiero ejecutar javascript / Python / Ruby dentro de mi aplicación.
Tengo una aplicación que crea el proceso automáticamente en función de la definición del usuario. El proceso se genera en C #. Quiero habilitar a los usuarios avanzados para que inyecten secuencias de comandos en ubicaciones predefinidas. Esos scripts deben ejecutarse desde el proceso de C #. Por ejemplo, el proceso creado tendrá algunas actividades y en el medio se ejecutará el script y luego el proceso continuará como antes. ¿Hay algún mecanismo para ejecutar esos scripts desde C #?
¿Has pensado en Visual Studio para Aplicaciones? No he escuchado mucho sobre esto desde .NET 1.1, pero podría valer la pena verlo.
Básicamente, tiene dos problemas: cómo definir el punto de inyección en el código generado y cómo ejecutar scripts de python / ruby / whatev desde allí.
Dependiendo de cómo genere el proceso, una solución posible sería agregar una función a cada posible punto de inyección. La función verificará si el usuario ha asociado alguna secuencia de comandos con puntos determinados y, de ser así, ejecuta la secuencia de comandos invocando IronPython / IronRuby (con parámetros dados opcionalmente).
Las desventajas incluyen: acceso limitado desde los scripts al proceso creado (básicamente, solo se puede acceder a las variables pasadas como parámetros); así como los límites de implementación (la versión actual de IronPython omite varias funciones básicas del sistema).
He hecho exactamente esto recientemente: permití la adición en tiempo de ejecución de scripts C #.
No es nada difícil, y este artículo:
http://www.divil.co.uk/net/articles/plugins/scripting.asp
es un resumen muy útil de los detalles.
Lenguaje de scripting impresionante de C # - Script.Net
Mire en IronPython e IronRuby: estos le permitirán interoperar fácilmente con C #.
Puede compilar código C # desde una aplicación C # utilizando la clase CSharpCodeProvider .
Si la compilación tiene éxito, puede ejecutar el ensamblaje resultante como se devuelve a través de la propiedad CompiledAssembly de la clase CompilerResults .
Puede compilar el código C # "sobre la marcha" en un ensamblaje en memoria. Creo que esto también es posible con IronPython e IronRuby. Mire el método CodeDomProvider.CreateProvider .
Si necesita ejecutar secuencias de comandos mucho, o si su proceso se ejecuta durante un tiempo prolongado, es posible que desee cargar estos ensamblados en otro dominio de aplicación. Y descarga el AppDomain una vez que hayas terminado con el script. De lo contrario, no podrá eliminarlos de la memoria. Esto tiene algunas consecuencias en las otras clases en su proyecto, porque tiene que ordenar todas las llamadas.
.NET tiene un lenguaje de scripting que incluye el motor de tiempo de ejecución en PowerShell que puede integrarse en cualquier aplicación .NET.