2013-04-22 35 views
4

我寫了一個C#程序,我會這樣進行編譯:如何使用mono編譯GUI應用程序?

C:\用戶\管理\文檔\ Visual Studio 2005的\項目\ GUITest \ GUITest> MCS *的.cs /r:System.Data, System.Drawing,System.Windows.Forms,.. \ HtmlAgilityPack.dll

但是輸出應用程序有一個控制檯窗口。 有沒有辦法編譯程序,以便我可以在沒有控制檯窗口的情況下獲得應用程序?

+1

你的代碼是什麼樣的?你是否開始打開表格?如果你不給我們太多的信息,這有點難。 – 2013-04-22 03:38:09

+0

是的,它通過打開表單開始。感謝您的關注! – for1096 2013-04-22 03:54:13

+1

我認爲你並沒有開始打開表格,因爲它打開了一個控制檯窗口。除非你說它打開一個控制檯窗口以及主窗體? – 2013-04-22 04:21:48

回答

6

Windows應用程序有兩種不同的「模式」或類型:控制檯應用程序和GUI應用程序。無論您如何構建託管應用程序,託管應用程序都是如此。

控制檯應用程序將始終在啓動時自動顯示控制檯窗口。你也可以也可以編寫代碼來顯示一個GUI窗口(例如一個窗體),但這是可選的。無論哪種方式,控制檯窗口將始終顯示。

GUI應用程序在啓動時不顯示任何內容。通常,您會編寫顯示GUI窗口(例如表單)的代碼,但您不必這樣做。如果你不顯示任何內容,你已經創建了人們通常稱之爲「後臺應用程序」的內容,因爲它在後臺運行而不顯示任何UI。這對於控制檯應用程序來說是不可能的,因爲它顯示了醜陋的控制檯窗口。

所以如果你不要想要控制檯窗口,你不想要一個控制檯應用程序。你想要一個常規的GUI應用程序。

現在,我們面臨的挑戰是如何使用Mono編譯器來實現這一目標。 Visual Studio將此選項作爲項目級設置公開。單聲道編譯器需要一個標誌,/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中記錄的同樣的快速修復(沒有理由)。

+0

非常感謝!我沒有注意到'target'選項。 – for1096 2013-04-24 01:12:18

相關問題