Как конвертировать .NET EXE в родной Win32 EXE? - PullRequest
4 голосов
/ 11 мая 2009

Как я могу конвертировать .NET exe в Win32 exe? (У меня нет кода) Цель - запустить приложение в Linux с помощью Wine. Я предполагаю, что .NET EXE не может быть запущен в Wine, и я не хочу использовать моно.

Ответы [ 6 ]

3 голосов
/ 11 мая 2009

в зависимости от того, какая это версия .NET и какие библиотеки она использует, вы можете попробовать запустить ее под Mono без компиляции IL-кода до нативного кода.

большинство дистрибутивов Linux имеют его в своих системах управления пакетами.

см. http://www.mono -project.com / Main_Page для получения более подробной информации

альтернатива - использовать NGen для компиляции (http://blogs.msdn.com/clrcodegeneration/archive/2007/09/15/to-ngen-or-not-to-ngen.aspx)., но я не уверен, что это будет работать под WINE.

2 голосов
/ 11 мая 2009

Это, вероятно, трудное решение для вас, но я упоминаю его здесь в интересах полноты.

Возможно, вы можете обернуть приложение .net с помощью Thinapp от VMWare. Я считаю, что это приводит к выполнению Win32.

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

2 голосов
/ 11 мая 2009

В зависимости от версии фреймворка, он может работать с Wine .NET Framework совместимость в Wine

1 голос
/ 30 марта 2011

Используйте опережающий компилятор со статическими библиотеками. A.k.a. мкбандл на моно

Mono поставляется с интерфейсом командной строки для моно JIT-компилятора для компиляции AOT (заранее). Вы можете использовать это для создания статически связанного .o, который затем можно запустить с помощью тривиальной оболочки, которая вызывает моно-кодировщик времени выполнения с объектным файлом. Если затем вы статически создадите ссылку на моно-библиотеки, у вас не будет никаких внешних зависимостей от установленной платформы .NET.

Конечно, вам придется отгрузить все статически связанные библиотеки или в конечном итоге получить огромный exe, но эй, это то, что вы просили

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);

Хотя я использовал это в Linux, я не совсем уверен, что он одинаково хорошо работает на Windows.

Обновление Вспомнил инструмент mkbundle :

sehe@sehelap:~$ 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
sehe@sehelap:~$ ./hello 
hello world

sehe@sehelap:~$ 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)
1 голос
/ 11 мая 2009

Возможно, он будет работать под моно?

0 голосов
/ 11 мая 2009

Просто не возможно. Для управляемого кода вам нужна какая-то виртуальная машина. В Linux вы можете использовать Mono или dotgnu portable.net. Может быть, какая-нибудь гипер-продвинутая версия wine сможет когда-нибудь запустить среду MS .net?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...