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 アプリケーションの 2 つの異なる「モード」またはタイプがあります。マネージド アプリケーションについても、構築方法に関係なく同じことが言えます。

コンソール アプリケーションは、起動時に常に自動的にコンソール ウィンドウを表示します。GUI ウィンドウ (フォームなど) を表示するコードを書くこともできますが、これはオプションです。どちらの方法でも、コンソール ウィンドウは常に表示されます。

GUI アプリケーションは、起動時に何も表示しません。通常、GUI ウィンドウ (フォームなど) を表示するコードを記述しますが、必須ではありません。何も表示しない場合は、UI を表示せずにバックグラウンドで実行されるため、よく「バックグラウンド アプリケーション」と呼ばれるものを作成したことになります。見苦しいコンソール ウィンドウが表示されるため、これはコンソール アプリケーションでは不可能です。

したがって、コンソール ウィンドウが必要ない場合は、コンソール アプリケーションは必要ありません。通常の GUI アプリケーションが必要です。

ここでの課題は、Mono コンパイラを使用してこれを実現する方法を見つけることです。Visual Studio は、このオプションをプロジェクト レベルの設定として公開します。/targetMono コンパイラには、ビルドするアプリケーションの種類を伝えるフラグが必要です。

  • /target:exe(デフォルトのオプション) コンソール アプリケーションをビルドします。
  • /target:winexeGUIアプリケーションを構築します
  • /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 に答える