Скомпилируйте и вызовите сгенерированный метод.

StackOverflow https://stackoverflow.com/questions/208711

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

Затем вы можете использовать отражение типов, чтобы создать экземпляр нужного типа и выполнить любой метод, который вам нужен.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top