C# 使用WindowsForm和CSharpCodeProvider时出现问题

C# 使用WindowsForm和CSharpCodeProvider时出现问题,c#,.net,winforms,C#,.net,Winforms,我正在编写一个程序,可以动态创建小型windows窗体应用程序。 现在,exe文件生成正确。但当我打开它时,显示了两个窗口 那么我应该怎么做才能禁用那个黑色窗口呢 这是我的密码: string sourceName = "MyForm.cs"; FileInfo sourceFile = new FileInfo(sourceName); CSharpCodeProvider provider = new CSharpCodeProvider(); status_content_

我正在编写一个程序,可以动态创建小型windows窗体应用程序。 现在,exe文件生成正确。但当我打开它时,显示了两个窗口

那么我应该怎么做才能禁用那个黑色窗口呢

这是我的密码:

string sourceName = "MyForm.cs";  
FileInfo sourceFile = new FileInfo(sourceName);  
CSharpCodeProvider provider = new CSharpCodeProvider();  

status_content_label.Text = "Exporting ... ";  

String exeName = String.Format(@"{0}\{1}.exe", "Output/", sourceFile.Name.Replace(".", "_"));  

CompilerParameters cp = new CompilerParameters();  

cp.ReferencedAssemblies.Add("System.dll");  
cp.ReferencedAssemblies.Add("System.Drawing.dll");  
cp.ReferencedAssemblies.Add("System.Windows.Forms.dll");  
//cp.ReferencedAssemblies.Add("AxInterop.ShockwaveFlashObjects.dll");  
//cp.ReferencedAssemblies.Add("Interop.ShockwaveFlashObjects.dll");  
//cp.ReferencedAssemblies.Add("System.Data.dll");  

// Generate an executable instead of   
// a class library.  
cp.GenerateExecutable = true;  

// Specify the assembly file name to generate.  
cp.OutputAssembly = exeName;  

// Save the assembly as a physical file.  
cp.GenerateInMemory = false;  

cp.IncludeDebugInformation = false;  

// Set whether to treat all warnings as errors.  
cp.TreatWarningsAsErrors = false;  

cp.CompilerOptions = "/optimize /win32icon:" + config.GetIconPath() + " MyForm.cs";  

// Invoke compilation of the source file.  
CompilerResults cr = provider.CompileAssemblyFromFile(cp, sourceName);  

string errorMessage;  

if (cr.Errors.Count > 0)  
{  
    // Display compilation errors.  
    errorMessage = "Errors building {0} into {1}" + sourceName + cr.PathToAssembly + "\n";  
    foreach (CompilerError ce in cr.Errors)  
    {  
        errorMessage += "  {0}" + ce.ToString() + "\n";  
    }  
    errorReport.ShowError(errorMessage);  
    errorReport.Show();  

    status_content_label.Text = "Failed to create the exe file.";  
}  
else
{  
    status_content_label.Text = "Exe file successfully created.";  
}
这是要构建的演示类:

using System;  
using System.Drawing;  
using System.Windows.Forms;  

class MyForm : Form  
{  
    public MyForm()  
    {  
        this.Text = "Hello World";  
        this.StartPosition = FormStartPosition.CenterScreen;  
    }  

    public static void Main()  
    {  
        Application.Run(new MyForm());  
    }  
}

谢谢大家。

您应该像这样更新编译器选项:

cp.CompilerOptions = "/target:winexe /optimize /win32icon:" + config.GetIconPath() + " MyForm.cs";  

指示编译器编译Windows/GUI应用程序,而不是控制台应用程序(这是默认设置)。

这主意真的很酷,但IronRuby或IronPython不是解决这种情况的更好方法吗?CLR中的Emit命名空间又是什么呢

只要我的钱