2009-05-11 7 views
4

.NET exeをWin32 exeに変換するにはどうすればよいですか? (私はコードを持っていません) 目的はLinuxでワインを使ってアプリケーションを実行することです。私は、.NETのexeはワインで動くことができず、モノを使いたくないと推測しています。.NET exeをネイティブWin32 exeに変換するには?

答えて

3

.NETのバージョンによって異なりますが、どのライブラリを使用するのかは、ILをネイティブコードにコンパイルせずにMonoで実行してみてください。

ほとんどのLinuxディストリビューションでは、パッケージ管理システムで使用できます。

参照:詳細はhttp://www.mono-project.com/Main_Page

代替がコンパイル(http://blogs.msdn.com/clrcodegeneration/archive/2007/09/15/to-ngen-or-not-to-ngen.aspx)を行うためにNGENを使用することです。しかし、私はそれがワインの下でうまくいくかどうかはわかりません。

+0

私が持っているのはexeです。私はNGenを使ってコンパイルするコードを持っていません。 – devnull

+0

一方、私はワインで.NET exeを実行しようとします。 – devnull

+0

NGenはILを機械命令にコンパイルします。これは奇妙なことに.NETの依存関係をネイティブWin32の依存関係にしたり、管理されていないヒープメモリを管理されていないネイティブヒープメモリに変換したりしません。NGENのモジュールを実行するには、CLRが必要です。 @devnull:JITコンパイラを実行するためのソースコードは必要ありませんが、モジュールに対してNGenを実行するためのソースコードは必要ありません。 – IInspectable

0

単純にできません。マネージコードの場合、実行するには何らかの種類のVMが必要です。LinuxではMonoまたはdotgnu portable.netを使用できます。ワインのいくつかの高度なバージョンは、かつてMSの.netフレームワークを実行することができますか?

1

これはおそらくモノラルで動作しますか?

+0

それは、入力に基づいてExcelファイルを処理するのWinFormアカウントマネージャアプリケーションです:

更新mkbundleツールを思い出しました。 – devnull

+1

OK、それから、私はそれがモノラルで実行するのが難しくなると思います(与えられたExcelの依存関係)。 –

2

あなたのフレームワークのバージョンによってはそれがワイン .Net Framework compability in Wine

+0

私はいくつかのサードパーティのアセンブリとP /呼び出し呼び出しを使ってかなり大きなアプリケーションを持っていて、Wine + Monoとうまく動作します –

2

でうまくいくかもしれないこれはおそらく、あなたのために困難な解決策ですが、私はここで完全性の利益のためにそれを言及。

おそらく.netアプリケーションをVMWareのThinappでラップすることができます。私はこれがwin32実行可能ファイルになると信じています。

https://www.vmware.com/products/thinapp

1

静的ライブラリを進めオブタイムコンパイラを使用してください。 A.k.a.モノ上のmkbundle

Monoには、AOTをコンパイルするためのモノJITコンパイラに対するコマンドラインインターフェイスが付属しています(先行時間)。これを使用して静的にリンクされた.oを作成し、それをオブジェクトファイルでモノランタイムエンベッダーを呼び出す簡単なラッパーで実行することができます。モノラルライブラリに静的にリンクすると、インストールされている.NETフレームワークに外部依存関係はありません。もちろん

、あなたはすべて静的にリンクされたライブラリを出荷したりhughe exeファイルで終わる必要がありますが、ちょっと、それは私がLinux上でこれを使用している間、あなたが

mono --aot=static 

      static Create an ELF object file (.o) which can be statically linked into an executable when embedding the mono runtime. When this option is used, the object 
       file needs to be registered with the embedded runtime using the mono_aot_register_module function which takes as its argument the mono_aot_module_<ASSEM‐ 
       BLY NAME>_info global symbol from the object file: 

       extern void *mono_aot_module_hello_info; 

       mono_aot_register_module (mono_aot_module_hello_info); 

を求めたものだ、私はないんだけど完全にそれがウィンドウ上で同様にうまく動作することを完全に確認します。

[email protected]:~$ mkbundle --static test.exe -o hello 
OS is: Linux 
Note that statically linking the LGPL Mono runtime has more licensing restrictions than dynamically linking. 
See http://www.mono-project.com/Licensing for details on licensing. 
Sources: 1 Auto-dependencies: False 
    embedding: /home/sehe/test.exe 
Compiling: 
as -o temp.o temp.s 
cc -o hello -Wall `pkg-config --cflags mono` temp.c `pkg-config --libs-only-L mono` -Wl,-Bstatic -lmono -Wl,-Bdynamic `pkg-config --libs-only-l mono | sed -e "s/\-lmono //"` temp.o 
Done 
[email protected]:~$ ./hello 
hello world 

[email protected]:~$ ldd hello 
linux-gate.so.1 => (0xb7875000) 
libdl.so.2 => /lib/libdl.so.2 (0xb785f000) 
libpthread.so.0 => /lib/libpthread.so.0 (0xb7845000) 
libm.so.6 => /lib/libm.so.6 (0xb781e000) 
libgthread-2.0.so.0 => /usr/lib/libgthread-2.0.so.0 (0xb7819000) 
librt.so.1 => /lib/librt.so.1 (0xb7810000) 
libglib-2.0.so.0 => /lib/libglib-2.0.so.0 (0xb7741000) 
libc.so.6 => /lib/libc.so.6 (0xb75e4000) 
/lib/ld-linux.so.2 (0xb7876000) 
libpcre.so.3 => /lib/libpcre.so.3 (0xb75af000) 
+0

ああ、おそらくもっと簡単に 'mkbundle mkbundle --static test .exe -o test'を埋め込みラッパーを手動でコンパイルするのではなく、直接実行してください:) – sehe

+0

http://stackoverflow.com/questions/1948113/mono-mkbundle-windows – sehe

関連する問題