Compilação e invocar um método gerado
-
03-07-2019 - |
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.
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