5

我写了一个 C# 程序,我会这样编译:

C:\Users\Administrator\Documents\Visual Studio 2005\Projects\GUITest\GUITest>mcs *.cs /r:System.Data,System.Drawing,System.Windows.Forms,..\HtmlAgilityPack.dll

但是输出应用程序有一个控制台窗口。有没有办法编译程序,以便我可以在没有控制台窗口的情况下获得应用程序?

4

1 回答 1

7

Windows 应用程序有两种不同的“模式”或类型:控制台应用程序和 GUI 应用程序。托管应用程序也是如此,无论您如何构建它们。

控制台应用程序将始终在启动时自动显示控制台窗口。您还可以编写代码来显示 GUI 窗口(例如,表单),但这是可选的。无论哪种方式,控制台窗口都将始终显示。

GUI 应用程序在启动时不显示任何内容。通常,您编写显示 GUI 窗口(例如,表单)的代码,但您不必这样做。如果您不显示任何内容,那么您就创建了人们通常所说的“后台应用程序”,因为它在后台运行而不显示任何 UI。这对于控制台应用程序是不可能的,因为它显示了那个丑陋的控制台窗口。

因此,如果您想要控制台窗口,您就不需要控制台应用程序。您需要一个常规的 GUI 应用程序。

现在,挑战在于弄清楚如何使用 Mono 编译器实现这一目标。Visual Studio 将此选项公开为项目级设置。Mono 编译器需要一个标志,/target告诉它要构建什么类型的应用程序。

  • /target:exe(默认选项)将构建一个控制台应用程序
  • /target:winexe将构建一个 GUI 应用程序
  • /target:library将构建一个库(它不是一个可执行的应用程序,而只是一块可重用的代码)

因此,将您在命令行中运行的命令更改为:

mcs *.cs /target:winexe /r:System.Data,System.Drawing,System.Windows.Forms,...

我相信您还需要确保您运行的是相对较新的 Mono 版本。旧版本不支持创建 GUI 应用程序(/target:winexe未实现该开关)。我知道从 2.8 版开始完全支持此功能,但没有理由不使用可用的最新版本。

如果我的回答对您来说不够权威,您会发现Mono WinForms FAQ中记录的相同快速修复(没有理由) 。

于 2013-04-22T06:56:48.660 回答