Компилировать и вызывать сгенерированный метод - PullRequest
1 голос
/ 16 октября 2008

Мне удалось создать класс с использованием CodeDom и добавить в него один метод. Теперь, есть ли способ, создав экземпляр CodeCompileUnit, скомпилировать код и вызвать сгенерированный метод? Вызов метода должен выполняться в том же контексте, что и генерация кода.

1 Ответ

5 голосов
/ 16 октября 2008

взято из моего друга в блоге :

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

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

...