2009-08-24 10 views
13

私は単純な純粋な.Net 2.0コンソールユーティリティをポータブルexeに変換して、USBスティックに入れて、CLRとフレームワークライブラリが特定のマシンにインストールされているかどうか心配することなく実行できます。簡単な.NetコンソールプロジェクトaをMonoとmkbundleの移植可能なexeファイルに変換するには?

StackOverflowのは、すでにネット・プロジェクトからの自己完結型のWindows EXEファイルを作成するためのMonoMkbundleを使用してsome informationを持っていますが、私が持っているしたいことは、コンパクトけど便利HOWTOです。

単純なC#Visual Studioプロジェクトから移植性を達成するための最小限の手順は何ですか?

答えて

16

私は簡単な方法を見つけましたhereしかし、自分でテストしていないので、結果を保証することはできません。いつものようにYMMV。

元の記事からの引用は、(同様にかかわらず、元の記事のスレッドに従ってください):

Mkbundle:

はあなたが必要とする理由あなたは不思議でしたアプリケーションでモノをバンドル。あなたのプログラムを実行するためにインストールされているNET FrameworkまたはMono?クライアントに余計な負担をかけることなくアプリケーションを配布して、追加のフレームワークをインストールできるのであれば、はるかに便利でしょうか?だからここにいる。 .NETベースのアプリケーションをMonoにバンドルさせるため、Monoまたは.NETをインストールする必要はありません。

は、あなたが最新のモノやCygwinをインストールする必要があり、環境

ファーストを用意します。 Monoのインストールは非常に簡単で、何かを壊すことはできません。 Cygwinのインストールを開始したら、フルビューに入り、さらに4つのパッケージを追加してください。これらはgcc、mingw、mingw-zlib、zlibです。

これでコマンドプロンプトが必要です。 MonoとCygwinはどちらもデスクトップ上のコマンドプロンプトのショートカットを作成しますが、それらを組み合わせて1つにする必要があります。ここに私のためにそれを行うバッチがあります。たとえば、他のモノバージョンがある場合は、変更する必要があります。

コード:

echo Mono version 2.4 Build 6 
echo Prepending 'C:\PROGRA~1\Mono-2.4\bin' to PATH 
PATH=C:\PROGRA~1\Mono-2.4\bin;%PATH% 

chdir C:\cygwin\bin 
bash --login -i 

だから我々は、このCygwinのモードを実行し、コマンドプロンプトに今あるモノ

でアプリケーションをバンドルします。これはもはやDOSプロンプトではなく、 "dir"はもう動作しません。ファイルを一覧表示するには、linuxコマンド "ls"を使用します。閲覧しているフォルダは、以下のようになります。 Arekはユーザー名です。 コード:あなたのエクスプローラでこのフォルダへ

C:\cygwin\home\Arek 

参照。これで2つのファイルがこのフォルダにコピーされます。 1stはアプリケーションexe、2ndはMono.dll(2MB)です。これはMonoフォルダにあります。 コード:全体の手順は、長いファイル名で動作するので、アプリケーションのexeファイルの名前を変更しないいくつかの理由

C:\Program Files\Mono-2.4\bin 

。この古いDOS 8.3の命名規則に準拠する必要があります。

コマンドプロンプトに戻ります。アプリケーションをバンドルするには1つのコマンドしか必要ありません。ここにいくつかの説明があります。

mkbundleはMonoパッケージ内のプログラムです。 -o Bundled1.exeは、バンドルされているexeの名前の付け方を指定します。 Winform1.exeには何が含まれるかが記載されていますが、Monoライブラリは含まれています|私はそれが何であるか分かりませんが、デプスは必要です。だから、

mkbundle -o Bundled1.exe Winform1.exe --deps -z 

今はモノ自体とともに、独自のアプリが含まれているあなたのBundled1.exeを得た:-zは、exeファイルたくさん

コードを出力を圧縮します。 Monoや.NETを実行する必要はありません。サイズが4MB以上になることに注意してください。これらのバンドルされたexeは軽量ではありません。

関連する問題