构建C#应用程序运行时并获得结果

本文关键字:结果 运行时 应用程序 构建 | 更新日期: 2023-09-27 18:19:31

我想在我的应用程序中编译一个C#控制台应用程序,并以某种方式获得返回的结果。我希望这能安静地发生(我不希望控制台真的显示等)让我们假设我有这个代码

private Assembly BuildAssembly(string code)
{
    Microsoft.CSharp.CSharpCodeProvider provider = 
       new CSharpCodeProvider();
    ICodeCompiler compiler = provider.CreateCompiler();
    CompilerParameters compilerparams = new CompilerParameters();
    compilerparams.GenerateExecutable = false;
    compilerparams.GenerateInMemory = true;
    CompilerResults results = 
       compiler.CompileAssemblyFromSource(compilerparams, code);
    if (results.Errors.HasErrors)
    {
        StringBuilder errors = new StringBuilder("Compiler Errors :'r'n");
        foreach (CompilerError error in results.Errors )
        {
            errors.AppendFormat("Line {0},{1}'t: {2}'n", 
                   error.Line, error.Column, error.ErrorText);
        }
        throw new Exception(errors.ToString());
    }
    else
    {
        return results.CompiledAssembly;
    }
}

我将如何执行程序集并获得结果?

构建C#应用程序运行时并获得结果

这是我发现的东西-

public object ExecuteCode(string code, string namespacename, string classname, string functionname, bool isstatic, params object[] args)
{
    var asm = BuildAssembly(code);
    object instance = null;
    Type type;
    if(isstatic)
    {
        type = asm.GetType(namespacename + "." + classname);
    }
    else
    {
        instance = asm.CreateInstance(namespacename + "." + classname);
        type = instance.GetType();
    }
    return type.GetMethod(functionname).Invoke(instance, args);
}

此方法只是扩展了BuildAssembly函数。

来源