如何使用mono编译GUI应用程序?

时间:2013-04-22 03:27:57

标签: c# mono

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

  

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

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

1 个答案:

答案 0 :(得分:6)

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中记录了相同的快速修复(没有基本原理)。