Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Console.WriteLine来自CodeDomProvider的文本_C#_Asp.net_Asp.net Mvc 5_Codedom_System Codedom Compiler - Fatal编程技术网

C# Console.WriteLine来自CodeDomProvider的文本

C# Console.WriteLine来自CodeDomProvider的文本,c#,asp.net,asp.net-mvc-5,codedom,system-codedom-compiler,C#,Asp.net,Asp.net Mvc 5,Codedom,System Codedom Compiler,我正在尝试使用CodeDomProvider来制作一个C#编译器。 我设法得到了错误,但无法得到输出 这就是我到目前为止所做的: public List<string> Errors(CompilerResults compilerResults) { List<string> messages = new List<string>(); foreach (CompilerError error in comp

我正在尝试使用CodeDomProvider来制作一个C#编译器。 我设法得到了错误,但无法得到输出

这就是我到目前为止所做的:

    public List<string> Errors(CompilerResults compilerResults)
    {
        List<string> messages = new List<string>();

        foreach (CompilerError error in compilerResults.Errors)
        {
            messages.Add(String.Format("Line {0} Error No:{1} - {2}", error.Line, error.ErrorNumber, error.ErrorText));
        }

        return messages;
    }

    public CompilerResults ProcessCompilation(string programText)
    {
        CodeDomProvider codeDomProvider = CodeDomProvider.CreateProvider("CSharp");
        CompilerParameters parameters = new CompilerParameters();
        parameters.GenerateExecutable = false;
        StringCollection assemblies = new StringCollection();
        return codeDomProvider.CompileAssemblyFromSource(parameters, programText);
    }
compilerResults.Output
始终为空。 如果我运行这段代码:

using System;

public class HelloWorld
{
    public static void Main()
    {
        Console.WriteLine("Hello world!");
    }
}

如何显示消息“Hello world!”?

compileasemblyFromSource
顾名思义,创建一个程序集。要访问已编译的代码,您可以使用反射,然后使用反射来查找并调用
Main
方法:

compilerResults.CompiledAssembly.GetType("HelloWorld").GetMethod("Main").Invoke(null, null);
虽然如果将
参数.GenerateExecutable
设置为
true
,您可以将其简化为:

compilerResults.CompiledAssembly.EntryPoint.Invoke(null, null);
compilerResults.CompiledAssembly.EntryPoint.Invoke(null, null);