Ejecución de código dinámico en WPF C# aplicaciones
Este artículo aborda el problema de ejecutar código desde un archivo de texto externo dentro de una aplicación WPF C#. El archivo de texto, que contiene el código que se ejecutará, reside en el directorio de ejecución de la aplicación.
Implementación
Esta solución aprovecha una combinación de técnicas de compilación y reflexión de código. El proceso implica la compilación en tiempo real del código desde el archivo de texto y la instancia e invocación posterior del método de destino del ensamblaje compilado.
El siguiente fragmento de código ilustra este enfoque:
// ... code ...
Dictionary providerOptions = new Dictionary
{
{"CompilerVersion", "v3.5"}
};
CSharpCodeProvider provider = new CSharpCodeProvider(providerOptions);
CompilerParameters compilerParams = new CompilerParameters
{
GenerateInMemory = true,
GenerateExecutable = false
};
CompilerResults results = provider.CompileAssemblyFromSource(compilerParams, sourceCode);
if (results.Errors.Count > 0)
throw new Exception("Compilation failed!");
object instance = results.CompiledAssembly.CreateInstance("Foo.Bar"); // Assuming the class is named "Bar" in the "Foo" namespace
MethodInfo method = instance.GetType().GetMethod("SayHello"); // Assuming the method is named "SayHello"
method.Invoke(instance, null);
explicación detallada
El código primero lee el código C# del archivo de texto en una variable de cadena ( sourcecode
). A csharpCodeprovider
se inicializa con opciones de compilador especificadas. compilerParameters
están configurados para generar el ensamblaje compilado en la memoria, sin crear un archivo ejecutable. El método compilEssemblyFromSource
luego realiza la compilación.
La comprobación de errores sigue el proceso de compilación. Si la compilación es exitosa, se crea una instancia de la clase compilada usando createInstance
, y el método especificado se invoca usando getMethod
y invoke
. Esto permite la ejecución dinámica del código cargado externamente. Tenga en cuenta que el espacio de nombres y los nombres de clase/método deben coincidir con el código en el archivo de texto. El manejo de errores (por ejemplo, los bloques de prueba de prueba) se debe agregar para obtener robustez en un entorno de producción.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3