Скомпилируйте и вызовите сгенерированный метод.
-
03-07-2019 - |
Вопрос
Мне удалось создать класс с помощью CodeDom и добавить к этому классу один метод.Теперь, есть ли способ, создав экземпляр CodeCompileUnit, скомпилировать код и вызвать сгенерированный метод?Вызов метода должен выполняться в том же контексте, что и генерация кода.
Решение
Взято из блог моего друга:
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();
Затем вы можете использовать отражение типов, чтобы создать экземпляр нужного типа и выполнить любой метод, который вам нужен.
Не связан с StackOverflow