当我打开编译后的文件时,它什么也不做

When I open my compiled file it does nothing

我做了一个简单的编译器来学习CodeDom。但它不起作用,当我尝试打开我的编译文件时它什么也没做。

当我 运行 代码并选择一个目录来保存 exe 文件时,会生成 exe 文件,但是当我单击 exe 文件时,它什么都不做。

建造者:

using System;
using System.IO;
using System.CodeDom.Compiler;
using Microsoft.CSharp;
using System.Windows.Forms;

namespace TestBuilder
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        void build(string output, string title, string msg)
        {
            CompilerParameters p = new CompilerParameters();
            p.GenerateExecutable = true;
            p.ReferencedAssemblies.AddRange(new String[] { "System.dll"});
            p.OutputAssembly = output;
            p.CompilerOptions = "/t:winexe";

            string source = File.ReadAllText(@"C:\Users\Gebruiker\Documents\visual studio 2015\Projects\TestCompiler\Test\Program.cs");
            string errors = String.Empty;
            source = source.Replace("[MESSAGE]", msg);
            CompilerResults results = new CSharpCodeProvider().CompileAssemblyFromSource(p, source);

            if (results.Errors.Count > 0)
            {
                foreach (CompilerError err in results.Errors)
                {
                    errors += "Error: " + err.ToString() + "\r\n\r\n";
                }
            }
            else errors = "Successfully built:\n" + output;
            MessageBox.Show(errors, "Build", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }

        private void button1_Click(object sender, EventArgs e)
        {
            SaveFileDialog sfd = new SaveFileDialog();
            sfd.Filter = "EXE files (*.exe)|*.exe";
            DialogResult result = sfd.ShowDialog();
            if (result == DialogResult.OK)
            {
                build(sfd.FileName, textBox1.Text, textBox1.Text);
            }
        }
    }
}

program.cs 文件:

using System;

namespace Test
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("[MESSAGE]");
            Console.ReadLine();
        }
    }
}

如何解决这个问题,当我编译并执行文件时,它会显示我在文本框中输入的消息?

p.CompilerOptions = "/t:winexe"; 更改为 p.CompilerOptions = "/t:exe";

之后,当您 运行 它时,编译的程序应该输出您在 TextBox 中输入的任何内容。

Source

Use /target:exe to create a console application.