Comment installer Mono sur macOS alors mono fonctionne au terminal?

J’essaie de faire fonctionner une installation Mono sur un Mac (OS X version 10.10.5), et bien que l’installation indique qu’elle est terminée avec succès, je ne peux pas appeler mono depuis le terminal.

Pour l’installer, j’ai lancé uninstallMono.sh en tant que root pour vérifier que nous n’avions plus de rests, puis exécuté MonoFramework-MDK-4.0.4.1.macos10.xamarin.x86.pkg. Le programme d’installation semble s’être terminé avec succès, mais il s’agit d’une tentative d’appeler les 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 tente de trouver son exécutable en utilisant le which mono ne renvoie rien.

Mise à jour (car il y a encore des vues deux ans plus tard):

Les dernières versions du processus d’installation de Mono (5.x) créent un fichier ( mono-commands ) dans /etc/paths.d qui contient le chemin de:

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

Donc /usr/local/bin n’est plus utilisé …

Original

Les nouvelles versions de mono sont conformes aux exigences de “El Capitan” de ne rien installer dans / usr / bin et donc maintenant / usr / local / bin est utilisé. Je ne suis pas sûr de la version mono 4.x qui a démarré 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 installé 4.2.0:

 $ which mono /usr/local/bin/mono $ which mcs /usr/local/bin/mcs $ mono --version Mono JIT comstackr version 4.2.0 (explicit/2701b19 Mon Aug 31 09:57:28 EDT 2015) Copyright (C) 2002-2014 Novell, Inc, Xamarin Inc and Consortingbutors. 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 "$@" 

Dans OS X El Capitan, exécutez la commande suivante dans Terminal pour prendre en charge la commande mono

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

Il est préférable d’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 (lorsque vous mettez à jour la version, il n’est pas nécessaire de changer la variable PATH)

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

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

J’ai regardé cette page parce que j’avais aussi 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. Le fait de les relier n’a pas semblé fonctionner parce que j’aurais des erreurs en essayant d’utiliser la commande mono et que je cherchais des bibliothèques au mauvais endroit.

Ce que j’ai finalement trouvé a fonctionné (par essais et erreurs) consistait à placer $ PATH dans l’infrastructure Mono en utilisant la commande dans le 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 sur OS X), cela m’a permis de lancer Duplicati en mono (ce qui était la raison pour laquelle je le voulais), 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. Quelqu’un avec une expérience de programmation réelle pour commenter ou clarifier?

Après la première installation de Mono Framework à l’aide de brew cask j’ai découvert que cette brew offrait Mono (!)

J’ai désinstallé Mono en premier.

 $ brew cask uninstall mono-mdk 

Et installé avec brew install mono et supprimé toutes les modifications de configuration dans ~/.zshrc .

On dirait que c’est beaucoup plus sympa:

 $ type mono mono is /usr/local/bin/mono $ mono --version Mono JIT comstackr 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 Consortingbutors. 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 /Library/Frameworks/Mono.framework/Home/bin dû append /Library/Frameworks/Mono.framework/Home/bin à la variable d’environnement 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! 

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

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

Avec ce mono est disponible:

 $ mono --version Mono JIT comstackr 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 Consortingbutors. 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 

El Capitan protège désormais certains répertoires système en mode “sans racine” (alias System Integrity Protection). Si vous exécutez la commande ls -lO / System / Library / LaunchDaemons, vous verrez que les répertoires et fichiers sous-jacents 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 fortement 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 en essayant d’installer les modules pear / pecl et les applications macports / homebrew. Ceux-ci ont généralement besoin d’installer des fichiers dans / usr / include et / usr / lib, qui sont également maintenant limités.

Remarque: les réponses précédentes à ce problème sur Internet vous donnent des instructions pour modifier les parameters NVRAM, mais Apple a déclaré que la méthode NVRAM cesserait de fonctionner avec la version publique d’El Capitan. La version de GM a déjà désactivé la solution de contournement de la NVRAM, donc cette réponse devrait vous permettre de progresser.

Résumé rapide: Atm, l’installateur de framework mono ne fonctionne correctement que si vous l’installez à la racine. Il appenda automatiquement /Library/Frameworks/Mono.framework/Versions/Current/Commands à $PATH , mais je ne sais pas si vous devrez append /Library/Frameworks/Mono.framework/Versions/Current/bin/ par main ou si tout fonctionne. (Les Commands sont un lien symbolique vers bin , mais cela ne fonctionne toujours pas)

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

De plus, une grande partie de /Volumes/osxapps/Library/Frameworks/Mono.framework/ y compris les Commands n’étaient pas des dossiers, mais des liens symboliques qui ne fonctionnaient pas car ils s’attendaient à ce que les dossiers soient root. Par exemple: Si tout a été installé dans root, /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 également un lien symbolique.

J’ai ajouté:

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

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

J’ai donc copié le dossier de /Volumes/osxapps/Library/Frameworks dans /Library/Frameworks/ et cela a résolu toutes les erreurs et tout fonctionne correctement, mais maintenant j’ai deux copies de Mono.framework et je ne voulais pas qu’il soit installé dans root en premier lieu, car root est sur un SSD, et l’espace est limité.

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

Cependant, il serait toujours préférable pour moi d’installer sur /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 mono-projet que son installateur mordait tout si vous n’installiez pas à root, mais je ne suis pas sûr de la meilleure façon 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 pourrait aider quelqu’un d’autre.

essayez d’installer l’ancienne version. 3.4.0 fonctionne pour moi OSX (10.10.5) ..

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