我设法使用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