Как конвертировать простой .NET-проект в переносимый exe с помощью Mono и mkbundle?

Я хотел бы преобразовать мою простую чистую консольную утилиту .Net 2.0 в переносимый exe, который я мог бы просто положить на USB-накопитель и запустить, не беспокоясь о том, установлены ли библиотеки CLR и framework на определенной машине или нет,

В Stackoverflow уже есть некоторая информация по использованию Mono и Mkbundle для создания автономных версий Windows из .Net-проектов, но то, что я хотел бы иметь, - это компактный, но полезный HOWTO.

Каковы минимальные шаги для достижения переносимости из простого проекта С# Visual Studio?

Ответы

Ответ 1

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

Цитата из оригинальной статьи (пожалуйста, следуйте за ней также в оригинальной статье):

Mkbundle: пакет Моно с вашими приложениями

Вы когда-нибудь задумывались, зачем вам нужна .NET Framework или Mono для запуска вашей программы? Что ж, было бы намного удобнее, если бы вы могли распространять свои приложения, не подталкивая своих клиентов к установке дополнительных фреймворков, не так ли? Итак, мы здесь. Позволяет связать .NET-приложение с Mono, поэтому вам не нужен Mono или .NET для его запуска.

Подготовьте среду

Сначала вам нужно установить новейшие Mono и Cygwin. Установка Mono очень проста, поэтому вы ничего не можете испортить. Когда вы начнете установку Cygwin, перейдите в полноэкранный режим, затем добавьте 4 дополнительных пакета. Это: gcc, mingw, mingw-zlib и zlib.

Теперь вам потребуется командная строка. Оба Mono и Cygwin создают ярлыки для командной строки на вашем рабочем столе, но вам нужно объединить их в один. Вот пакет, который делает это для меня. Возможно, вам придется изменить его, если у вас есть другая версия Mono, например.

код:

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

Свяжите приложение с Mono

Итак, теперь мы находимся в командной строке, запуская этот режим Cygwin. Обратите внимание, что это больше не приглашение DOS, и "dir" больше не будет работать. В список файлов используется команда linux "ls". Папка, которую вы просматриваете сейчас, похожа на приведенную ниже. Arek - это имя пользователя. Код:

C:\cygwin\home\Arek

Перейдите в эту папку с вашим проводником. Теперь вы копируете 2 файла в эту папку. 1st - ваше приложение exe, а 2nd - файл Mono.dll(2MB), который вы можете найти в своей папке Mono. Код:

C:\Program Files\Mono-2.4\bin

По какой-то причине вся процедура не работает с длинными именами файлов, поэтому переименуйте приложение exe. Он должен соответствовать этому старым именам DOS 8.3.

Вернется в командную строку. Вам нужно всего лишь 1 команда, чтобы связать ваше приложение, и вот некоторые объяснения.

mkbundle - это программа в пакете Mono | -o Bundled1.exe указывает, как будет указываться Mono-bundled exe | Winform1.exe говорит, что будет включено, библиотеки Mono будут включены в любом случае | --deps необходимо, хотя я не уверен, что он делает | -z будет сильно сжимать выходной поток

код:

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

Итак, теперь вы получили свой Bundled1.exe, который содержит ваше собственное приложение вместе с самим Mono. Для его запуска не требуется Mono или .NET. Обратите внимание, что размер будет 4 МБ или более. Те, что связаны с exes, не являются легкими.