Compilar e invocar un método generado.
-
03-07-2019 - |
Pregunta
Logré crear una clase usando CodeDom y agregar un método único a esa clase. Ahora, ¿hay una manera de, después de haber construido la instancia de CodeCompileUnit, compilar el código e invocar el método generado? La invocación del método debe realizarse en el mismo contexto que la generación de código.
Solución
Tomado de un blog de un amigo mío :
CSharpCodeProvider codeProvider = new CSharpCodeProvider();
codeProvider.GenerateCodeFromNamespace(codeNamespace, new StringWriter(), new CodeGeneratorOptions());
CompilerParameters param = new CompilerParameters(assemblyReferences);
param.GenerateExecutable = false;
param.GenerateInMemory = true;
param.TreatWarningsAsErrors = false;
param.WarningLevel = 4;
CompilerResults results = codeProvider.CompileAssemblyFromDom(param, compileUnit);
Assembly assembly = results.CompiledAssembly;
Type[] types = assembly.GetExportedTypes();
Luego puedes usar la reflexión sobre los tipos para crear una instancia del tipo que deseas y ejecutar el método que quieras.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow