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.

¿Fue útil?

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
scroll top