构建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;
}
}
我将如何执行程序集并获得结果?
这是我发现的东西-
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函数。
来源