none
Cargar codigo en tiempo de ejecucion

    Pregunta

  • Un saludo a todos.

    Estoy tratando de ejecutar información existente e un archivo de texto o una base de datos en tiempo de ejecución, en otras palabras escribo lineas de programación c# en un texbox multiline y lo guardo como arxhivo.txt o  ya sea en SQL como nvarchar, ahora lo que quiero es que cuando presione un botón se ejecute el código que existe en ese momento en el archivo.

    No se si esto pueda ser posible.

    Espero haberme explicado, gracias por su tiempo y apoyo.

    miércoles, 13 de junio de 2018 22:09

Respuestas

  • Sí, es posible, pero un poco complicadillo. Se usa la clase CSharpCodeProvider y se le pasan parámetros para decirle cómo lo quieres compilar. Una de las opciones es "GenerateInMemory", que te deja el resultado ya cargado, y entonces lo mandas ejecutar mediante System.Reflection.

    En la documentación de MSDN tienes un ejemplo, aunque en este ejemplo pone GenerateInMemory=false y lo compila a un archivo en disco, cosa que en tu caso no te conviene. Pero te puede servir como punto de partida para ir estudiando cómo se usa, y a partir de ahí puedes ir mirando las distintas opciones.

    https://msdn.microsoft.com/en-us/library/microsoft.csharp.csharpcodeprovider(v=vs.90).aspx

    Una precaución: Si esto lo vas a hacer repetidamente, es decir, vas a ir metiendo nuevos textos o nuevos archivos y los vas a ir compilando uno tras otro, irás consumiendo la memoria poco a poco. Esto se debe a que el código que compila va quedando cargado en memoria y nunca se descarga. El remedio para esto es crear un AppDomain y cargarlo en el AppDomain, y luego descargar el AppDomain. Esto te agrega un grado más de complejidad, por si no era ya bastante complicado usar el CSharpProvider, por no hablar de luego usar Reflection para ejecutar el ensamblado resultante. Por eso te decía al principio que era "complicadillo".

    jueves, 14 de junio de 2018 6:09
    Moderador