2015-09-12 24 views
43

Sto provando a ottenere un'installazione mono in esecuzione su un Mac (OS X versione 10.10.5), e mentre l'installazione indica che è stata completata correttamente, non sono in grado di chiamare mono dal terminale.Come installare Mono su macOS così mono funziona nel terminale?

Per installarlo, ho eseguito uninstallMono.sh come root per assicurarci di non avere alcun cruft rimanente, quindi ho eseguito MonoFramework-MDK-4.0.4.1.macos10.xamarin.x86.pkg. Il programma di installazione è apparso per completare con successo, ma un tentativo di chiamare mono torna

-bash: mono: command not found

Il quadro mono non sembra essere installato:

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 

... ma non è presente in /usr/bin e il tentativo di trovare il suo eseguibile utilizzando which mono non restituisce nulla.

risposta

17

Aggiornamento (dal momento che questo è ancora ottenere viste due + anni successivi):

Le ultime versioni di Mono (5.x) processo di installazione crea un file (mono-commands) in /etc/paths.d che contiene il percorso di:

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

Così /usr/local/bin non più utilizzato ...

originale

012.351.

Le versioni più recenti di mono soddisfano i requisiti "El Capitan" di non installare nulla in /usr/bin e quindi ora /usr/local/bin viene utilizzato. (?) Non sono sicuro che mono versione 4.x che è iniziato nel ...

Ma presumo che non si dispone di/usr/local/bin nel percorso, provo:

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

Nel mio caso, ho 4.2.0 installato:

$ 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]" 
+2

Questo si è rivelato essere giusto. usr/local/bin non esisteva affatto sulla mia macchina. Creandolo e chiamando chmod 777 su usr/local, quindi reinstallando mono ci siamo presi cura di esso. In precedenza, mono stava tentando di installarsi su usr/local/bin e fallendo silenziosamente quando non riusciva a trovare la directory di destinazione. Grazie! –

+0

Dovrebbe esserci una cartella chiamata "Current" che punterà alla tua versione più recente invece di specificare specificatamente la 4.2.0. '/ Library/Frameworks/Mono.framework/Versions/Current/bin' Giusto? – NovaJoe

+0

Corretto, il **/Library/Frameworks/Mono.framework/Versions/Current ** è solo un collegamento simbolico all'ultima versione nel framework Mono. Vari script di installazione assegnano direttamente il "percorso versione" direttamente – SushiHangover

6

sono stato a guardare questa pagina perché anche ho avuto problemi con l'installazione di Mono (per la prima volta) su El Capitan. Ho trovato che il framework è stato installato ma i comandi non sono stati inseriti in/usr/local/bin. Il collegamento simbolico non funzionava perché avrei ricevuto errori durante il tentativo di utilizzare il comando mono e cercavo le librerie nel posto sbagliato.

Quello che ho finalmente trovato lavorato (per tentativi ed errori) stava tramontando $ PATH per il quadro Mono utilizzando il comando nel terminale:

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

Dato che io non sono un programmatore o coder (almeno non per molto tempo e mai su OS X), questo mi ha permesso di eseguire Duplicati usando mono (che era il motivo per cui lo volevo in primo luogo), ma non sono sicuro se questo è il modo corretto per risolvere questo o anche se questo dovrebbe essere fatto a tutti Chiunque abbia esperienza di programmazione effettiva per commentare o chiarire?

+2

Siamo riusciti a farlo funzionare creando un collegamento simbolico al comando mono. 'ln -s /Library/Frameworks/Mono.framework/Versions/Current/bin/mono/usr/local/bin/mono' –

80

In OS X El Capitan, eseguire il seguente in Terminal per sostenere mono comando

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

Se non vuoi doverlo digitare ogni volta che apri Terminal, aggiungi questo linea a '.bash_profile' nella tua home directory. Questo presuppone che tu stia ancora usando bash, e se hai cambiato la shell, ne sai già abbastanza per capire come impostare la tua nuova shell. – zanedp

+3

questo è ancora in vigore nel mese di aprile 2017 – sunsetjunks

12

E 'meglio usare la prossima esportazione:

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

  1. È non modificano l'ordine precedente di PATH (E 'molto importante !!)
  2. Si utilizzerà la versione corrente (quando l'aggiornamento la versione non è necessario cambiare la variabile PATH)

Un'altra opzione (migliore opzione) è quello di includere una nuova riga alla fine del file/etc/percorsi con il contenuto: /Library/Frameworks/Mono.framework/Versions/Current/bin

In questo caso, il percorso sarà disponibile per tutti gli utenti sul sistema.

+0

Grazie per questa risposta. Questo mi ha aiutato a scoprire cosa stava modificando il mio $ PATH al di fuori del mio .zshrc e dei file originati. –

3

El Capitan ora protegge alcune directory di sistema in modalità "senza radici" (anche noto come Protection System Integrity). Se esegui il comando ls -lO/System/Library/LaunchDaemons vedrai che le directory e i file sottostanti sono ora contrassegnati come "restricted".

È possibile disattivare la modalità senza radici in questo modo:

  1. Riavviare in modalità di ripristino (il riavvio e tenere premuto Cmd-R)
  2. Aprire un terminale
  3. Utilizzare questo comando: csrutil disabilitare

Riavviare ed eseguire il comando che ha funzionato prima di El Capitan

  1. Installa l'ultima versione di Mono.

Quando hai finito, si consiglia vivamente che si ri-abilitare SIP seguendo la stessa procedura, ma utilizzando csrutil consentire al punto 3.

mi sono imbattuto in un problema con la stessa causa principale durante il tentativo di ottenere i moduli pera/pecl e le app per Mac/Homebrew installate. In genere è necessario installare i file in/usr/include e/usr/lib, che ora sono anche limitati.

Nota: le risposte precedenti su Internet relative a questo problema forniscono istruzioni per la modifica delle impostazioni della NVRAM, ma Apple ha dichiarato che il metodo NVRAM smetterebbe di funzionare con la versione pubblica di El Capitan. La versione GM ha già disabilitato la soluzione NVRAM, quindi questa risposta dovrebbe farti andare avanti.

5

Dopo la prima installazione di Mono Framework utilizzando brew cask ho scoperto che brew si offre Mono (!)

ho disinstallato Mono prima.

$ brew cask uninstall mono-mdk 

E installato utilizzando brew install mono e rimosso tutte le modifiche di configurazione in ~/.zshrc.

sembra che sia molto più bello:

$ 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 

ho usato brew cask installare Mono quadro e dovuto aggiungere /Library/Frameworks/Mono.framework/Home/bin-PATH variabile di ambiente.

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

Da quando uso oh-my-zsh ho definito MONO_HOME in ~/.zshrc e regolati PATH di conseguenza:

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

Con questo mono è disponibile:

$ 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 
+0

Questo ha funzionato perfettamente per me, anch'io uso oh-my-zsh. Vorrei aggiungere per assicurarmi di 'source ~/.zshrc' per ottenere i comandi aggiornati da incollare. – jamescampbell

1

Sommario rapida: Atm, il quadro mono il programma di installazione funziona correttamente solo se lo si installa su root. Aggiungerà automaticamente /Library/Frameworks/Mono.framework/Versions/Current/Commands a $PATH, ma non so se sarà necessario aggiungere /Library/Frameworks/Mono.framework/Versions/Current/bin/ a mano o se tutto funziona correttamente. (Commands è un link simbolico a bin, ma ancora non può funzionare)

Più in profondità: Recentemente ho installato mono da MonoFramework-MDK-4.8.0.520.macos10.xamarin.universal.pkg. L'ho installato su /Volumes/osxapps/ anziché su root, ma l'installazione si aspettava ancora che tutto fosse in root. Aggiunse /Library/Frameworks/Mono.framework/Versions/Current/Commands a $PATH ma tutto in /Library/Frameworks/Mono.framework/ era solo directory vuote. Tutti i file risiedevano in /Volumes/osxapps/Library/Frameworks/Mono.framework/.

Inoltre, un sacco di quello che era in /Volumes/osxapps/Library/Frameworks/Mono.framework/ compreso Commands non erano le cartelle, ma i collegamenti simbolici che non ha funzionato perché si aspettavano le cartelle di essere in radice. Ad esempio: se tutto è stato installato in root, /Library/Frameworks/Mono.framework/Versions/Current/Commands è un collegamento simbolico a /Library/Frameworks/Mono.framework/Versions/Current/bin e /Library/Frameworks/Mono.framework/Versions/Current/ è anche un collegamento simbolico.

ho aggiunto:

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

a .bash_profile, in ~/, che mi ha permesso di eseguire i comandi/eseguibili, ma sono tutti morti con errori perché erano ancora aspettavano cose di essere in radice.

così ho copiato la cartella da /Volumes/osxapps/Library/Frameworks a /Library/Frameworks/ e che ha risolto tutti gli errori e le cose stanno funzionando correttamente, ma ora ho due copie di Mono.framework e non volevo che installato nella radice, in primo luogo, a causa root è su un SSD e lo spazio è limitato.

Una soluzione migliore sarebbe disinstallare mono in base alle istruzioni nella parte inferiore di this page e quindi reinstallare su root.

Tuttavia, sarebbe ancora meglio, per me, installare su /Volumes/osxapps/, ma non conosco il modo migliore per farlo. (Probabilmente potrei semplicemente ricreare un mucchio di collegamenti simbolici). Stavo per dire al mono-progetto che il loro installer cancella tutto se non si installa su root, ma non sono sicuro che sia il modo migliore per farlo. Così, invece, ho postato qui, con ciò che ho imparato finora, nella speranza che possa aiutare qualcun altro.