Сборка консольного приложения xamarin.mac для распространения

Я создал простое окно консоли в Xamarin Studio для mac.os. Я нажимаю отладку и вижу консольное приложение. Все работает нормально.

Но если я открою оболочку bash, перейду к папке bin/Debug и попытаюсь запустить программу, я получу сообщение: «невозможно выполнить двоичный файл».

Я подозреваю, что есть некоторые библиотеки, которые не связаны. Возможно, когда я запускаю в Xamarin, он настраивает среду для запуска/отладки приложения. Я не вижу никаких вариантов сборки в Xamarin Studio для связывания.

Я новичок в Xamarin, и у меня есть «настоящее» консольное приложение, которое я хотел бы связать и распространять. Любые указатели будут полезны, спасибо.

Спасибо, Брюс


person brewsky    schedule 05.01.2016    source источник
comment
Вы пытаетесь выполнить исполняемый файл .net напрямую, если вы хотите, чтобы он работал как отдельное приложение, вы должны создать Bundle, посмотрите документы Xamarin о том, как это сделать.   -  person Gusman    schedule 05.01.2016


Ответы (2)


Выходной файл .exe представляет собой исполняемый файл .NET, когда он запускается через отладчик, он запускается и выполняется исполняемым файлом mono.

Вы можете запустить .exe, перейдя к нему через терминал и выполнив:

mono MyConsoleApp.exe

Это запустит консольные приложения .exe, используя файл mono vm.

Если вы хотите связать .exe, вам нужно использовать mkbundle.

Это последовательность команд оболочки, которые я использовал для создания исполняемого файла OSX с помощью mkbundle:

# Configure pkg config path.
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/lib/pkgconfig:/Library/Frameworks/Mono.framework/Versions/3.0.12/lib/pkgconfig

# Configure Mono.Framework path.
export PATH=/Library/Frameworks/Mono.framework/Commands:$PATH

# Setup the architecture and framework references
export AS="as -arch i386"
export CC="clang -framework CoreFoundation -lobjc -liconv -arch i386 -mmacosx-version-min=10.6"

# Bundle the app. --deps auto-magically includes all dependencies for the .net exe, -o specifies the output native executable filename.
mkbundle MyConsoleApp.exe --deps -o MyConsoleApp

Это создаст исполняемый файл для OSX с именем MyConsoleApp (собственный исполняемый файл) для MyConsoleApp.exe (исполняемый файл .NET), имя которого можно запустить двойным щелчком.

person matthewrdev    schedule 05.01.2016
comment
Спасибо за ответ. Я построил, как было предложено, и отправил результат другому разработчику для тестирования/установки/выполнения. Есть 2 проблемы из этого теста. 1) Когда он запускается, он получает ошибку времени выполнения «monoboehm.dylib не найден». Я исследовал и, по-видимому, должен использовать «--static» в команде mkbundle. 2) После использования флага «mmacosx-version» mkbundle теперь жалуется, что «объектный файл был создан для новой версии OSX (10.11), а затем связан. Я не вижу возможности в Xamarin Studio установить версию OSX. Об этом заботится CC env var? - person brewsky; 07.01.2016

Просто отметим, что другой ответ, ссылающийся на mkbundle, применим только к MonoMac. Приложения Xamarin.Mac теперь создают собственное приложение запуска, которое справится с этой задачей за вас.

person Chris Hamons    schedule 19.02.2016