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

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

这是我的代码:

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 应用程序,而不是控制台应用程序(这是默认设置)。

关于c# - 使用 WindowsForm 和 CSharpCodeProvider 的问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7497493/

10-13 09:04