web-dev-qa-db-fra.com

Comment installer Mono sur macOS pour que mono fonctionne en terminal?

J'essaie d'exécuter une installation Mono sur un Mac (OS X version 10.10.5) et, même si l'installation indique qu'elle s'est terminée avec succès, je ne peux pas appeler en mono depuis le terminal.

Pour l'installer, j'ai lancé uninstallMono.sh en tant qu'utilisateur root afin de nous assurer qu'il ne nous restait plus aucun fichier, puis j'ai exécuté MonoFramework-MDK-4.0.4.1.macos10.xamarin.x86.pkg. Le programme d'installation a semblé se terminer avec succès, mais une tentative d'appeler des retours mono

-bash: mono: commande introuvable

Le framework mono semble être installé:

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

... mais il n'est pas présent dans /usr/bin et en essayant de trouver son exécutable en utilisant which mono ne retourne rien.

58
Kevin Mack

Mise à jour (étant donné que les vues sont toujours affichées deux ans plus tard):

La dernière version du processus d’installation de Mono (5.x) crée un fichier (mono-commands) dans /etc/paths.d qui contient le chemin de:

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

Alors /usr/local/bin n'est plus utilisé ...

Original

Les nouvelles versions de mono sont conformes aux exigences "El Capitan" selon lesquelles rien ne doit être installé dans / usr/bin et donc maintenant / usr/local/bin est utilisé. Je ne sais pas quelle version mono 4.x a commencé dans ...

Mais je suppose que vous n’avez pas/usr/local/bin dans votre chemin (?), Essayez:

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

Dans mon cas, j'ai 4.2.0 installé:

$ 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 "$@"
35
SushiHangover

Sous OS X El Capitan, exécutez ce qui suit dans Terminal pour prendre en charge la commande mono

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

Il vaut mieux utiliser la prochaine exportation:

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

  1. Vous ne modifiez pas l'ordre précédent de PATH (c'est très important !!)
  2. Vous utiliserez la version actuelle (lors de la mise à jour de la version, il n'est pas nécessaire de modifier la variable PATH)

Une autre option ( meilleure option ) consiste à inclure une nouvelle ligne à la fin du fichier /etc/chemins avec le contenu: /Library/Frameworks/Mono.framework/Versions/Current/bin

Dans ce cas, le chemin sera disponible pour tous les utilisateurs sur le système.

13
Agnoia

Après la première installation de Mono Framework en utilisant brew cask J'ai découvert que brew lui-même offre Mono (!)

J'ai d'abord désinstallé Mono.

$ brew cask uninstall mono-mdk

Et l'a installé en utilisant brew install mono et a supprimé toutes les modifications de configuration dans ~/.zshrc.

On dirait que c'est beaucoup plus gentil:

$ 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

J'ai d'abord utilisé brew cask pour installer Mono Framework et a dû ajouter /Library/Frameworks/Mono.framework/Home/bin à PATH variable d’environnement.

$ 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!

Depuis que j'utilise oh-my-zsh j'ai défini MONO_HOME dans ~/.zshrc et ajusté PATH en conséquence:

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

Avec cela, mono est disponible:

$ 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
9
Jacek Laskowski

J'ai regardé cette page parce que moi aussi j'avais des problèmes pour installer Mono (pour la première fois) sur El Capitan. J'ai trouvé que le framework était installé mais les commandes n'étaient pas placées dans/usr/local/bin. Les relier ne semblait pas fonctionner, car j'obtiendrais des erreurs en essayant d'utiliser la commande mono et la recherche de bibliothèques au mauvais endroit.

Ce que j’ai finalement trouvé efficace (par essais et erreurs), c’était de définir $ PATH sur le framework Mono à l’aide de la commande in terminal:

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

Comme je ne suis ni programmeur ni codeur (du moins pas longtemps et jamais sous OS X), cela m'a permis de faire tourner Duplicati en mono (c'est pourquoi je le voulais d'abord), mais je ne suis pas Assurez-vous que c’est la bonne façon de résoudre ce problème ou même si cela doit être fait du tout. Quelqu'un avec une expérience de programmation réelle à commenter ou à clarifier?

6
fredgeorge

El Capitan protège maintenant certains répertoires système en mode "sans racine" (a.k.a. System Integrity Protection). Si vous exécutez la commande ls -lO/System/Library/LaunchDaemons, vous verrez que les répertoires et les fichiers qu’ils contiennent sont désormais marqués comme "restreints".

Vous pouvez désactiver le mode sans racine comme ceci:

  1. Redémarrez en mode de récupération (redémarrez et maintenez Cmd-R)
  2. Ouvrir un terminal
  3. Utilisez cette commande: csrutil disable

Redémarrez et exécutez la commande qui a fonctionné avant El Capitan

  1. Installez la dernière version de Mono.

Lorsque vous avez terminé, il est vivement recommandé de réactiver SIP en suivant les mêmes étapes, mais en utilisant csrutil enable à l’étape 3.

J'ai rencontré un problème avec la même cause fondamentale tout en essayant d'installer des modules pear/pecl et des applications macports/homebrew. Ceux-ci doivent généralement installer des fichiers dans/usr/include et/usr/lib, qui sont également restreints.

Remarque: Les réponses précédentes concernant Internet à ce problème vous expliquent comment modifier les paramètres de la NVRAM, mais Apple a indiqué que la méthode NVRAM cesserait de fonctionner avec la version publique d'El Capitan. Le GM a déjà désactivé la solution de contournement de la NVRAM, cette réponse devrait donc vous permettre d'aller de l'avant.

3
anilreddy

Résumé rapide: Atm, le programme d’installation mono-framework ne fonctionne correctement que si vous l’installez à la racine. Il ajoutera automatiquement /Library/Frameworks/Mono.framework/Versions/Current/Commands à $PATH, mais je ne sais pas si vous devrez ajouter /Library/Frameworks/Mono.framework/Versions/Current/bin/ à la main ou si tout fonctionne correctement. (Commands est un lien symbolique vers bin, mais il se peut que cela ne fonctionne toujours pas)

Plus en détail: j'ai récemment installé mono de MonoFramework-MDK-4.8.0.520.macos10.xamarin.universal.pkg. Je l'ai installé à /Volumes/osxapps/ au lieu de root, mais l’installation s’attend toujours à ce que tout soit en root. Il a ajouté /Library/Frameworks/Mono.framework/Versions/Current/Commands à $PATH mais tout en /Library/Frameworks/Mono.framework/ était juste des répertoires vides. Tous les fichiers résidaient dans /Volumes/osxapps/Library/Frameworks/Mono.framework/.

En outre, beaucoup de ce qui était dans /Volumes/osxapps/Library/Frameworks/Mono.framework/ y compris Commands ne sont pas des dossiers mais des liens symboliques qui ne fonctionnent pas car ils s’attendent à ce que les dossiers soient à la racine. Par exemple: Si tout était installé à la racine, /Library/Frameworks/Mono.framework/Versions/Current/Commands est un lien symbolique vers /Library/Frameworks/Mono.framework/Versions/Current/bin et /Library/Frameworks/Mono.framework/Versions/Current/ est aussi un lien symbolique.

J'ai ajouté:

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

à .bash_profile, dans ~/, qui m’a permis d’exécuter les commandes/exécutables, mais ils sont tous morts d’erreurs car ils s’attendaient toujours à ce que les choses soient à la racine.

J'ai donc copié le dossier de /Volumes/osxapps/Library/Frameworks à /Library/Frameworks/ et que toutes les erreurs ont été résolues et que tout fonctionne correctement, mais j’ai maintenant deux copies de Mono.framework et je ne voulais pas qu’elle soit installée en tant que root, car ce dernier est sur ssd et l’espace est limité.

Une meilleure solution serait de désinstaller mono en suivant les instructions au bas de cette page , puis de le réinstaller à la racine.

Cependant, il serait toujours préférable, pour moi, d’installer le /Volumes/osxapps/, mais je ne connais pas la meilleure façon de procéder. (Je pourrais probablement simplement recréer un tas de liens symboliques). J'allais dire au projet mono que leur installateur sabote tout si vous n'installez pas à root, mais je ne suis pas sûr du meilleur moyen de le faire non plus. Donc, au lieu de cela, j'ai posté ici, avec ce que j'ai appris jusqu'à présent, dans l'espoir que cela puisse aider quelqu'un d'autre.

1
FragmentalStew

essayez d'installer l'ancienne version. 3.4.0 travaille pour moi OSX (10.10.5) ..

http://Origin-download.mono-project.com/archive/3.4.0/macos-10-x86/

0
anilreddy