如何使用 CodeDomProvider 获取输出
本文关键字:输出 获取 CodeDomProvider 何使用 | 更新日期: 2023-09-27 17:55:19
我可以使用CodeDomProvider来编译C#代码。我编译并得到了编译结果。但是我想在下面获取代码片段的输出。我怎么得到这个?
例如:
for(int i=0;i<=5;i++)
{
System.Console.WriteLine(i);
}
上面的代码是我正在使用的代码。我可以成功编译它,但没有得到结果。我怎样才能得到结果?
是的,您也可以编译并获得结果。您需要将代码放在命名空间和函数内
CompilerResults results = provider.CompileAssemblyFromSource(parameters, code);
Assembly assembly = results.CompiledAssembly;
Type program = assembly.GetType("Dynamic.Test");
MethodInfo main = program.GetMethod("Test");
main.Invoke(null, null);
以上摘要来自 https://msdn.microsoft.com/en-us/library/saf5ce06(v=vs.100).aspx 和 http://www.codeproject.com/Tips/715891/Compiling-Csharp-Code-at-Runtime
编辑-
在下面的程序创建,对读取结果进行了一些修改。希望这有帮助。
using System;
using System.CodeDom;
using System.CodeDom.Compiler;
using System.Collections.Generic;
using System.Reflection;
using Microsoft.CSharp;
namespace ConsoleApplication1
{
internal class Program
{
static void Main(string[] args)
{
string code = @"
using System;
using System.Collections.Generic;
namespace Dynamic1
{
public class Test
{
public static IEnumerable<int> Test1()
{
for(int i=0;i<=5;i++)
{
yield return i;
}
}
}
}
";
CSharpCodeProvider provider = new CSharpCodeProvider();
CompilerParameters parameters =new CompilerParameters();
CompilerResults results = provider.CompileAssemblyFromSource(parameters, code);
Assembly assembly = results.CompiledAssembly;
Type program = assembly.GetType("Dynamic1.Test");
MethodInfo main = program.GetMethod("Test1");
IEnumerable<int> outputResults = (IEnumerable<int>)main.Invoke(null, null);
foreach (var result in outputResults)
{
Console.WriteLine(result);
}
Console.ReadLine();
}
}