How to install Mono on macOS so mono works in terminal?

I'm trying to get a Mono install running on a mac (OS X version 10.10.5), and while the install states that it's completed successfully, I'm not able to call mono from the terminal.

To install it, I ran uninstallMono.sh as root to ensure we didn't have any leftover cruft, then ran MonoFramework-MDK-4.0.4.1.macos10.xamarin.x86.pkg. The installer appeared to complete successfully, but an attempt to call mono returns

-bash: mono: command not found

The mono framework does appear to be installed:

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

...but it isn't present in /usr/bin and attempting to find its executable using which mono returns nothing.


Solution 1:

In OS X El Capitan, run the following in Terminal to support mono command

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

Solution 2:

Update (since this is still getting views two+ years later):

The latest versions of Mono (5.x) installation process creates a file (mono-commands) in /etc/paths.d that contains the path of:

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

So /usr/local/bin is no longer used...

Original

Newer versions of mono comply to the "El Capitan" requirements of not installing anything into /usr/bin and thus now /usr/local/bin is used. I am not sure which mono 4.x release that started in...

But I would assume that you do not have /usr/local/bin in your path(?), try:

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

In my case, I have 4.2.0 installed:

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

Solution 3:

It is better to use the next export:

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

  1. You don't modify the previous order of PATH (It's very important!!)
  2. You will use the current version (when update the version it isn't necessary to change the variable PATH)

Another option (best option) is to include a new line at the end of the file /etc/paths with the content: /Library/Frameworks/Mono.framework/Versions/Current/bin

In this case, the path will be available for all users on the system.