C# 如何防止在控制台中打开动态生成的exe

C# 如何防止在控制台中打开动态生成的exe,c#,winforms,dynamic-programming,codedom,system-codedom-compiler,C#,Winforms,Dynamic Programming,Codedom,System Codedom Compiler,我在c#4.0中工作,我想动态生成一个可执行文件,所以我使用了CodeDome,但当我在控制台中打开它并执行时,然后我的表单显示出来,我想生成winform可执行文件。我怎样才能达到我的目标。代码如下: string Code = @" using System; using System.Windows.Forms; namespace CSBSS { static class Program { /// <summary> /// The main entry point fo

我在c#4.0中工作,我想动态生成一个可执行文件,所以我使用了CodeDome,但当我在控制台中打开它并执行时,然后我的表单显示出来,我想生成winform可执行文件。我怎样才能达到我的目标。代码如下:

string Code = @"
using System;
using System.Windows.Forms;

namespace CSBSS
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}

public class Form1 : Form
{
}
}

";

CodeDomProvider codeProvider = CodeDomProvider.CreateProvider("CSharp");

string tempFolder = @"..\DynamicOutput";
string Output = System.IO.Path.Combine(tempFolder, @"CSBSS.exe");
if (!System.IO.Directory.Exists(tempFolder))
{
    System.IO.Directory.CreateDirectory(tempFolder);
}
else
{
    if (System.IO.File.Exists(Output)) System.IO.File.Delete(Output);
}

System.CodeDom.Compiler.CompilerParameters parameters = new CompilerParameters();
parameters.ReferencedAssemblies.Add("System.dll");
parameters.ReferencedAssemblies.Add("System.Windows.Forms.dll");

parameters.TempFiles = new TempFileCollection(tempFolder, false);
//Make sure we generate an exe.
parameters.GenerateExecutable = true;
parameters.GenerateInMemory = false;
parameters.OutputAssembly = Output;


CompilerResults results = codeProvider.CompileAssemblyFromSource(parameters, Code);

string OutputMsg = "";
if (results.Errors.Count > 0)
{
    string msgDescr = "";
    foreach (CompilerError CompErr in results.Errors)
    {
        msgDescr += "Line number " + CompErr.Line +
                    ", Error Number: " + CompErr.ErrorNumber +
                    ", '" + CompErr.ErrorText + ";" +
                    Environment.NewLine + Environment.NewLine;
    }
    OutputMsg = @"Error occured while generating executable file, please check following internal error 
" + msgDescr;
    //return false;
}
else
{
    OutputMsg = "Executable file has been generated successfully.";
}
stringcode=@”
使用制度;
使用System.Windows.Forms;
名称空间CSBSS
{
静态类程序
{
/// 
///应用程序的主要入口点。
/// 
[状态线程]
静态void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(新Form1());
}
}
公开课表格1:表格
{
}
}
";
CodeDomProvider codeProvider=CodeDomProvider.CreateProvider(“CSharp”);
字符串tempFolder=@.\DynamicOutput”;
字符串输出=System.IO.Path.Combine(tempFolder,@“CSBSS.exe”);
如果(!System.IO.Directory.Exists(tempFolder))
{
System.IO.Directory.CreateDirectory(tempFolder);
}
其他的
{
如果(System.IO.File.Exists(Output))System.IO.File.Delete(Output);
}
System.CodeDom.Compiler.CompilerParameters参数=新的CompilerParameters();
parameters.referencedAssembly.Add(“System.dll”);
parameters.referencedAssembly.Add(“System.Windows.Forms.dll”);
parameters.TempFiles=新的TempFileCollection(tempFolder,false);
//确保生成一个exe。
parameters.GenerateExecutable=true;
parameters.GenerateInMemory=false;
parameters.OutputAssembly=输出;
CompilerResults results=codeProvider.CompileAsemblyFromSource(参数,代码);
字符串OutputMsg=“”;
如果(results.Errors.Count>0)
{
字符串msgDescr=“”;
foreach(结果中的编译器错误comperrr.Errors)
{
msgDescr+=“线号”+压缩线+
,错误号:“+comperrr.ErrorNumber”+
“,”+CompErr.ErrorText+”+
Environment.NewLine+Environment.NewLine;
}
OutputMsg=@“生成可执行文件时出错,请检查以下内部错误
“+msgDescr;
//返回false;
}
其他的
{
OutputMsg=“已成功生成可执行文件。”;
}

使用以下命令指定要作为的输出类型:


完成。这正是我需要的
parameters.CompilerOptions = "/target:winexe";