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

for*_*096 4 c# mono

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

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

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

Cod*_*ray 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,...
Run Code Online (Sandbox Code Playgroud)

我相信您还需要确保您运行的是相对较新版本的Mono.旧版本不包括创建GUI应用程序的支持(/target:winexe交换机未实现).我知道从2.8版本开始就完全支持这个版本,但没有理由不使用最新版本.

如果我的答案对你来说不够权威,你会发现Mono WinForms常见问题中记录了相同的快速修复(没有理由).