Compila e invoca un metodo generato
-
03-07-2019 - |
Domanda
Sono riuscito a creare una classe usando CodeDom e ad aggiungere un singolo metodo a quella classe. Ora, c'è un modo per, dopo aver costruito l'istanza CodeCompileUnit, compilare il codice e invocare il metodo generato? L'invocazione del metodo deve essere effettuata nello stesso contesto della generazione del codice.
Soluzione
Tratto da un il mio amico 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();
È quindi possibile utilizzare la riflessione sui tipi per creare un'istanza del tipo desiderato ed eseguire il metodo desiderato.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow