Pergunta

Eu consegui criar uma classe usando CodeDom e adicionar um único método para essa classe. Agora, há uma maneira de, tendo construído a instância CodeCompileUnit, compilar o código e chamar o método gerado? A invocação de método tem que ser feito no mesmo contexto como a geração de código.

Foi útil?

Solução

Tomado de um amigo meu blog :

    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();

Você pode então usar a reflexão sobre os tipos para criar uma instância do tipo que você deseja e executar qualquer método que você quiser.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top