Все приложения для Mac, которые я разработал до сих пор, перестали работать после обновления Mono до 6.6 (та же проблема с 6.8).
Возврат к предыдущей установке Mono 6.4 решает проблему.
Мои приложения компилируются с использованием TargetFramework net461
(точка входа для Mac) и netstandard2.0
(общая dll), если это имеет значение.
Как всегда, скорее всего, это моя ошибка.
Спасибо за терпеливость.
Привет, @LaraSQP , спасибо за отчеты, но было бы очень
Также следует отметить, что при компиляции для _release_ с моно, установленным в вашем блоке разработчика, он будет связывать моно в вашем приложении, поэтому для его запуска не потребуется устанавливать моно. Это сделает так, чтобы у вас была известная среда выполнения. В качестве альтернативы можно использовать .NET Core и объединить его в свое приложение (для этого не требуется установка mono).
Спасибо за быстрый ответ.
Не знал о Console.app и сообщит об исключении.
Не знал и об установке Mono на Windows. Чертова штука. Какой установщик применим? 64-битный (без GTK #) или мне тоже нужен GTK #?
GTK # не нужен, он использует mkbundle только для объединения моно, что он делает с помощью свойства <MacBundleTarget>
в вашем csproj. По умолчанию используется mono-6.4.0-osx-10.9-x64
если не указано иное, и может быть любое значение, указанное в mkbundle -list-targets
Что касается Console.app, у меня есть только две ошибки, которые довольно неинформативны (по крайней мере, для меня):
29 марта, 06:19:01 my-MacBook-Air com.apple.xpc.launchd [1] (com.apple.xpc.launchd.oneshot.0x1000015e.MyApp1 [10705]): служба завершена с аномальным кодом: 78
29 марта 06:40:29 my-MacBook-Air com.apple.xpc.launchd [1] (com.example.MyApp1.4212 [11362]): служба завершена с аномальным кодом: 1
Сейчас пытаюсь перекомпилировать с установленным Mono.
@LaraSQP Взгляните на раздел «Отчеты о
"Отчеты о сбоях" пусто.
Кстати, у меня установлен mono 6.8, и я не вижу такой же проблемы.
Одна вещь, которую следует учитывать, заключается в том, что если вы каким-то образом изменили Info.plist (из одной из других ваших проблем), это _ необходимо_ быть только LF, UTF-8 _без BOM_, а не CRLF. В противном случае он будет считать, что он поврежден.
Info.plist
было изменено npp.
Я установил Mono на свою машину разработчика, но перекомпиляция не добавляет Mono в пакет. Что мне не хватает?
В режиме выпуска он делает это по умолчанию. В противном случае установите для <MacBundleMono>
значение true в csproj.
Взгляните на BundleMono.targets и Mac.targets, чтобы
Я надеюсь добавить эти параметры в свойства проекта VS, чтобы облегчить их обнаружение в будущем, но, увы, так мало (свободного) времени для этого.
Добавление <MacBundleMono>True</MacBundleMono>
в csproj этого не делает.
Если только он не делает это таким образом, который мне не очевиден, то есть.
OK.
Оказывается, папка MonoBundle включается в приложение только тогда, когда для MacBundleMono
установлено значение False
.
Кроме того, Info.plist
изменяется в процессе сборки, чтобы включить как UTF-8 BOM
и CRLF
, поэтому впоследствии они должны быть исправлены вручную.
Кроме того, Info.plist изменяется в процессе сборки, чтобы включить как спецификацию UTF-8, так и CRLF, поэтому впоследствии их необходимо исправить вручную.
Этого не должно быть ... не могли бы вы прикрепить свой файл Info.plist, который вы используете (не скомпилированный).
Оказывается, папка MonoBundle включается в приложение только тогда, когда для MacBundleMono установлено значение False.
Да, папка MonoBundle не означает, что моно входит в комплект ... как ни странно ... отсутствие этой папки означает, что моно входит в комплект и все включено в собственный исполняемый файл.
MacBundleMono
- это перебор. Моно не включается ни на что.
И любая версия Mono выше 6.4.0.137 продолжает вылетать из моих приложений.
Позже я рассмотрю цели сборки.
Спасибо за терпеливость.
Вы все еще получаете это предупреждение при сборке?
Couldn't find mkbundle, so app bundle will require mono to be installed! Install mono from https://mono-project.com to bundle it with your app or set MonoPath to where it is installed.
Если это так, вам может потребоваться перезапустить или указать конкретно, где моно был установлен, используя <MonoPath>
.
Также не могли бы вы прислать мне dmg вашего приложения (при условии, что вы готовы это сделать?). Я мог бы попытаться диагностировать это дальше.
Я не получаю предупреждения о mkbundle
поэтому я попробую MonoPath
.
Прилагается простой проект, который я использовал для тестирования того и этого. Он даже не запускается выше Mono 6.4 на Mac, и в Console.app нет отчета о сбоях.
Я добавил Mono в environment variables
, поэтому mkbundle
доступен без проблем. MonoPath
здесь не проблема.
Фактически, я смог запустить mkbundle
вручную через ...
mkbundle --simple --cross mono-6.4.0-osx-10.9-x64 MacFileTest.exe -o MacFileTest
... который казался успешным, за исключением того, что он не работал на Mac.
Поскольку в моем проекте (см. Выше) нет ссылки на mkbundle
, очевидно, что мне очень многое не хватает.
Кажется, мой последний пост не попал, или я не могу его найти, или он был каким-то образом удален.
Во-первых, использование netcoreapp3.1
действительно устранило проблему. Большое спасибо.
Я удалил Mono
и теперь все приложения работают на net core
. Я немного удивлен, так как команда dotnet
в Terminal
отрывается:
zsh: команда не найдена: dotnet
Думаю, одно не имеет отношения к другому (?).
Остаются две небольшие проблемы, о которых вы, возможно, захотите узнать:
Процесс сборки всегда включает файл .pdb
внутри папки MacOS
пакета.
Процесс сборки всегда изменяет Info.plist
чтобы включить ключ CFBundleExecutable
, дублируя существующий, если он есть. Это приводит к включению как BOM
и CRLF
, несмотря на то, что они не присутствуют в исходном Info.plist
в проекте.
Обходной путь для обеих этих проблем - простой пакетный файл для удаления 1 и замены 2, который, к сожалению, должен запускаться вручную, поскольку его нельзя добавить в post-build events
потому что, несмотря на то, что он post-build
он все еще запускается слишком рано , насколько я могу судить.
Еще раз спасибо за ваше бесконечное терпение.