使用mono编译GUI应用程序的方法是什么?

5
我编写了一个C#程序,我将像这样编译它:
C:\ Users \ Administrator \ Documents \ Visual Studio 2005 \ Projects \ GUITest \ GUITest> mcs *.cs / r:System.Data,System.Drawing,System.Windows.Forms,.. \ HtmlAgilityPack.dll
但输出应用程序有一个控制台窗口。 有没有一种方法可以编译程序,以便我可以获得一个没有控制台窗口的应用程序?

1
你的代码是什么样子的?你是从打开一个表单开始的吗?如果你没有给我们足够的信息,这会有点困难。 - Alastair Pitts
是的,它通过打开一个表单开始。感谢您的关注! - for1096
1
我认为你并没有从打开一个表单开始,因为它是打开一个控制台窗口。除非你是说它会同时打开一个控制台窗口和主表单? - Alastair Pitts
是的,那正是发生的事情...我只是不想让控制台窗口出现,因为控制台窗口完全没有用。 - for1096
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中找到相同的快速解决方案(没有解释原理)。


非常感谢!我没有注意到target选项。 - for1096

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接