Eto: Mac - Mono 6.4 запускает все приложения, более высокие версии Mono - нет.

Созданный на 28 мар. 2020  ·  21Комментарии  ·  Источник: picoe/Eto

Все приложения для Mac, которые я разработал до сих пор, перестали работать после обновления Mono до 6.6 (та же проблема с 6.8).

Возврат к предыдущей установке Mono 6.4 решает проблему.

Мои приложения компилируются с использованием TargetFramework net461 (точка входа для Mac) и netstandard2.0 (общая dll), если это имеет значение.

Как всегда, скорее всего, это моя ошибка.

Спасибо за терпеливость.

Все 21 Комментарий

Привет, @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, и я не вижу такой же проблемы.

Screen Shot 2020-03-28 at 3 30 34 PM

Одна вещь, которую следует учитывать, заключается в том, что если вы каким-то образом изменили 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 нет отчета о сбоях.

MacFileTest.zip

Я добавил 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

Думаю, одно не имеет отношения к другому (?).

Остаются две небольшие проблемы, о которых вы, возможно, захотите узнать:

  1. Процесс сборки всегда включает файл .pdb внутри папки MacOS пакета.

  2. Процесс сборки всегда изменяет Info.plist чтобы включить ключ CFBundleExecutable , дублируя существующий, если он есть. Это приводит к включению как BOM и CRLF , несмотря на то, что они не присутствуют в исходном Info.plist в проекте.

Обходной путь для обеих этих проблем - простой пакетный файл для удаления 1 и замены 2, который, к сожалению, должен запускаться вручную, поскольку его нельзя добавить в post-build events потому что, несмотря на то, что он post-build он все еще запускается слишком рано , насколько я могу судить.

Еще раз спасибо за ваше бесконечное терпение.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги