Подтвердить что ты не робот

Как установить Mono на macOS, так моно работает в терминале?

Я пытаюсь установить Mono, установленную на Mac (OS X версии 10.10.5), и, хотя установка устанавливает, что она выполнена успешно, я не могу вызывать моно из терминала.

Чтобы установить его, я запустил uninstallMono.sh как root, чтобы убедиться, что у нас не было ни одного оставшегося слома, затем выполнил MonoFramework-MDK-4.0.4.1.macos10.xamarin.x86.pkg. Установщик, похоже, успешно завершил работу, но попытка вызвать mono возвращает

- bash: mono: команда не найдена

Моно-структура, как представляется, устанавливается:

Lees-Mac-Pro:Downloads kevinmack$ cd /Volumes/Macintosh\ HD/Library/Frameworks/
Lees-Mac-Pro:Frameworks kevinmack$ ls -l
total 32
lrwxr-xr-x  1 root  wheel   71 Jan 20  2015 AEProfiling.framework -> ../../Applications/Motion.app/Contents/Frameworks/AEProfiling.framework
lrwxr-xr-x  1 root  wheel   74 Jan 20  2015 AERegistration.framework -> ../../Applications/Motion.app/Contents/Frameworks/AERegistration.framework
lrwxr-xr-x  1 root  wheel   74 Jan 20  2015 AudioMixEngine.framework -> ../../Applications/Motion.app/Contents/Frameworks/AudioMixEngine.framework
drwxr-xr-x  8 root  admin  272 Sep 12 11:24 Mono.framework
lrwxr-xr-x  1 root  wheel   60 Sep  9 22:16 NyxAudioAnalysis.framework -> /System/Library/PrivateFrameworks/NyxAudioAnalysis.framework
drwxr-xr-x  5 root  wheel  170 Jan 20  2015 PluginManager.framework
drwxr-xr-x  8 root  wheel  272 Sep  9 22:19 iTunesLibrary.framework

... но он отсутствует в /usr/bin и попытка найти его исполняемый файл с помощью which mono ничего не возвращает.

4b9b3361

Ответ 1

Новые версии mono соответствуют требованиям "El Capitan", которые не устанавливают ничего в /usr/bin, и теперь используется /usr/local/bin. Я не уверен, какой релиз mono 4.x начался в...

Но я бы предположил, что у вас нет /usr/local/bin в вашем пути (?), попробуйте:

export PATH=/usr/local/bin:${PATH}
which mono
which mcs

В моем случае у меня установлен 4.2.0:

$ which mono
/usr/local/bin/mono
$ which mcs
/usr/local/bin/mcs
$ mono --version
Mono JIT compiler version 4.2.0 (explicit/2701b19 Mon Aug 31 09:57:28 EDT 2015)
Copyright (C) 2002-2014 Novell, Inc, Xamarin Inc and Contributors. www.mono-project.com
$ cat `which mcs`
#!/bin/sh
export PATH=$PATH:/Library/Frameworks/Mono.framework/Versions/4.2.0/bin
export PKG_CONFIG_PATH=/Library/Frameworks/Mono.framework/External/pkgconfig:/Library/Frameworks/Mono.framework/Versions/4.2.0/lib/pkgconfig:/Library/Frameworks/Mono.framework/Versions/4.2.0/share/pkgconfig:$PKG_CONFIG_PATH
exec /Library/Frameworks/Mono.framework/Versions/4.2.0/bin/mono $MONO_OPTIONS /Library/Frameworks/Mono.framework/Versions/4.2.0/lib/mono/4.5/mcs.exe "[email protected]"

Обновить (так как это все еще получает просмотры спустя два года):

Последние версии процесса установки Mono (5.x) создают файл mono-commands) в /etc/paths.d, который содержит путь:

/Library/Frameworks/Mono.framework/Versions/Current/Commands

Итак, /usr/local/bin больше не используется...

Ответ 2

В OS X El Capitan запустите следующую команду Terminal для поддержки команды mono

export PATH=/Library/Frameworks/Mono.framework/Versions/Current/bin/:${PATH}

Ответ 3

Лучше использовать следующий экспорт:

export PATH = $PATH:/Library/Frameworks/Mono.framework/Versions/Current/bin/

  • Вы не изменяете предыдущий порядок PATH (он очень важно!!)
  • Вы будете использовать текущую версию (при обновлении в версии нет необходимости изменять переменную PATH)

Другим вариантом (лучший вариант) является включение новой строки в конец файла /etc/paths с содержимым: /Library/Frameworks/Mono.framework/Versions/Current/bin

В этом случае путь будет доступен для всех пользователей в системе.

Ответ 4

Я смотрел эту страницу, потому что у меня тоже были проблемы с установкой Mono (впервые) на El Capitan. Я обнаружил, что фреймворк установлен, но команды не были помещены в /usr/local/bin. Символирование их, похоже, не сработало, потому что я получал ошибки при попытке использовать команду mono и искал библиотеки в неположенном месте.

Что я, наконец, нашел работаемым (методом проб и ошибок), установил $PATH в среду Mono с помощью команды в терминале:

export PATH=/Library/Frameworks/Mono.framework/Versions/4.2.0/bin/:${PATH}

Так как я не программист или кодер (по крайней мере, не надолго и никогда не на OS X), это позволило мне запустить Duplicati с помощью моно (именно поэтому я и хотел его в первую очередь), но я Не уверен, что это правильный способ решить эту проблему или даже если это вообще нужно сделать. Кто-нибудь, у кого есть опыт программирования, чтобы прокомментировать или уточнить?

Ответ 5

El Capitan теперь защищает определенные системные каталоги в режиме "без корней" (защита целостности системы a.k.a.). Если вы запустите команду ls -lO/System/Library/LaunchDaemons, вы увидите, что находящиеся там каталоги и файлы теперь помечены как "ограниченные".

Вы можете отключить режим без rootless, например:

  • Перезагрузитесь в режим восстановления (перезагрузите и удерживайте Cmd-R)
  • Откройте терминал
  • Используйте эту команду: csrutil disable

Перезагрузите и запустите команду, которая работала до El Capitan

  1. Установите последнюю версию Mono.

Когда вы закончите, настоятельно рекомендуется повторно включить SIP, выполнив те же действия, но используя csrutil enable на шаге 3.

У меня возникла проблема с одной и той же первопричиной, пытаясь получить модули pear/pecl и приложения macports/homebrew. Обычно требуется установить файлы в /usr/include и/usr/lib, которые также теперь ограничены.

Примечание. Предыдущие ответы в Интернете об этой проблеме дают инструкции по изменению настроек NVRAM, но Apple заявила, что метод NVRAM перестанет работать с публичной версией El Capitan. Релиз GM уже отключил обходной путь NVRAM, поэтому этот ответ должен помочь вам в продвижении вперед.

Ответ 6

После первой установки Mono Framework с помощью brew cask я обнаружил, что brew сам предлагает Mono (!)

Сначала я удалил Mono.

$ brew cask uninstall mono-mdk

И установил его с помощью brew install mono и удалил все изменения конфигурации в ~/.zshrc.

Похоже, это гораздо приятнее:

$ type mono
mono is /usr/local/bin/mono

$ mono --version
Mono JIT compiler version 4.6.2 (Stable 4.6.2.7/08fd525 Tue Nov 22 22:05:18 GMT 2016)
Copyright (C) 2002-2014 Novell, Inc, Xamarin Inc and Contributors. www.mono-project.com
    TLS:           normal
    SIGSEGV:       altstack
    Notification:  kqueue
    Architecture:  amd64
    Disabled:      none
    Misc:          softdebug
    LLVM:          supported, not enabled.
    GC:            sgen

Сначала я использовал brew cask для установки Mono Framework и должен был добавить переменную среды /Library/Frameworks/Mono.framework/Home/bin в PATH.

$ brew cask info mono-mdk
mono-mdk: 4.6.2.7
http://www.mono-project.com/
Not installed
From: https://github.com/caskroom/homebrew-cask/blob/master/Casks/mono-mdk.rb
==> Name
Mono
==> Artifacts
MonoFramework-MDK-4.6.2.7.macos10.xamarin.universal.pkg (pkg)
➜  kafunk git:(master) brew cask install mono-mdk
==> Downloading https://download.mono-project.com/archive/4.6.2/macos-10-universal/MonoFramework-MDK-4.6.2.7.macos10.xamarin.universal.pkg
######################################################################## 100,0%
==> Verifying checksum for Cask mono-mdk
==> Running installer for mono-mdk; your password may be necessary.
==> Package installers may write to any location; options such as --appdir are ignored.
Password:
==> installer: Package name is Mono Framework
==> installer: Installing at base path /
==> installer: The install was successful.
🍺  mono-mdk was successfully installed!

Поскольку я использую oh-my-zsh, я определил MONO_HOME в ~/.zshrc и скорректировал PATH соответственно:

export MONO_HOME=/Library/Frameworks/Mono.framework/Home
export PATH=$MONO_HOME/bin:$PATH

С помощью этого mono доступно:

$ mono --version
Mono JIT compiler version 4.6.2 (mono-4.6.0-branch/08fd525 Thu Nov 10 20:28:28 EST 2016)
Copyright (C) 2002-2014 Novell, Inc, Xamarin Inc and Contributors. www.mono-project.com
    TLS:           normal
    SIGSEGV:       altstack
    Notification:  kqueue
    Architecture:  x86
    Disabled:      none
    Misc:          softdebug
    LLVM:          yes(3.6.0svn-mono-master/8b1520c)
    GC:            sgen

Ответ 7

Краткое описание: Atm, установщик mono framework работает правильно, если вы установите его в root. Он автоматически добавит /Library/Frameworks/Mono.framework/Versions/Current/Commands в $PATH, но я не знаю, нужно ли вам добавить /Library/Frameworks/Mono.framework/Versions/Current/bin/ вручную или если все просто работает. (Commands является символической ссылкой на bin, но она все еще может не работать)

Более подробно: Недавно я установил mono из MonoFramework-MDK-4.8.0.520.macos10.xamarin.universal.pkg. Я установил его вместо /Volumes/osxapps/ вместо root, но установка все еще ожидала, что все будет в корне. Он добавил /Library/Frameworks/Mono.framework/Versions/Current/Commands в $PATH, но все в /Library/Frameworks/Mono.framework/ было просто пустым каталогом. Все файлы находятся в /Volumes/osxapps/Library/Frameworks/Mono.framework/.

Кроме того, многое из того, что было в /Volumes/osxapps/Library/Frameworks/Mono.framework/, включая Commands, не было папками, а символическими ссылками, которые не работали, потому что они ожидали, что папки будут в корне. Например: если все было установлено в корне, /Library/Frameworks/Mono.framework/Versions/Current/Commands является символической ссылкой на /Library/Frameworks/Mono.framework/Versions/Current/bin, а /Library/Frameworks/Mono.framework/Versions/Current/ также является символической ссылкой.

Я добавил:

export PATH="/Volumes/osxapps/Library/Frameworks/Mono.framework/Versions/4.8.0/bin:$PATH"

до .bash_profile, в ~/, что позволило мне запустить команды/исполняемые файлы, но все они погибли с ошибками, потому что они все еще ожидали, что все будет в корне.

Итак, я скопировал папку с /Volumes/osxapps/Library/Frameworks в /Library/Frameworks/ и решил все ошибки, и все работает нормально, но теперь у меня есть две копии Mono.framework, и я не хотел, чтобы она была установлена ​​в корневом каталоге в первом потому что root находится на ssd, а пространство ограничено.

Лучшим решением было бы удалить моно в соответствии с инструкциями внизу на этой странице, а затем переустановить на root.

Однако мне все же было бы лучше установить на /Volumes/osxapps/, но я не знаю, как лучше это сделать. (Возможно, я мог бы просто воссоздать кучу символических ссылок). Я собирался рассказать о монопроекте, который их установщик заманивает, если вы не устанавливаете его на root, но я не уверен, что это лучший способ сделать это. Итак, вместо этого я разместил здесь, с тем, что я узнал до сих пор, в надежде, что он может помочь кому-то другому.