2015-09-12 19 views
43

Tôi đang cố gắng cài đặt Mono chạy trên máy Mac (OS X phiên bản 10.10.5) và trong khi cài đặt cho biết nó đã hoàn tất thành công, tôi không thể gọi mono từ thiết bị đầu cuối.Làm thế nào để cài đặt Mono trên macOS để mono hoạt động trong thiết bị đầu cuối?

Để cài đặt, tôi đã chạy uninstallMono.sh làm thư mục gốc để đảm bảo chúng tôi không có bất kỳ hành trình nào còn sót lại, sau đó chạy MonoFramework-MDK-4.0.4.1.macos10.xamarin.x86.pkg. Trình cài đặt xuất hiện để hoàn thành công, nhưng một nỗ lực để gọi mono trả

-bash: mono: command not found

Khung mono không xuất hiện để được cài đặt:

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 

... nhưng không có trong /usr/bin và cố gắng tìm tệp thực thi của nó bằng cách sử dụng which mono không trả về gì.

Trả lời

17

Cập nhật (vì đây là vẫn nhận được quan điểm hai + năm sau):

Các phiên bản mới nhất của Mono (5.x) Quá trình cài đặt sẽ tạo ra một tập tin (mono-commands) trong /etc/paths.d có chứa con đường:

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

Vì vậy /usr/local/bin không còn sử dụng ...

gốc

012.351.

Phiên bản mới hơn của mono tuân thủ các yêu cầu "El Capitan" không cài đặt bất kỳ thứ gì vào /usr/bin và do đó hiện tại /usr/local/bin được sử dụng. (?) Tôi không chắc chắn mà mono phát hành 4.x bắt đầu vào ...

Nhưng tôi sẽ cho rằng bạn không có/usr/local/bin trong đường dẫn của bạn, hãy thử:

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

Trong trường hợp của tôi, tôi có 4.2.0 cài đặt:

$ 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

Điều này hóa ra khá đúng. usr/local/bin không tồn tại trên máy tính của tôi. Tạo nó và gọi chmod 777 trên usr/local, sau đó cài đặt lại mono đã chăm sóc nó. Trước đây, mono đã cố gắng cài đặt vào usr/local/bin, và không âm thầm khi nó không thể tìm thấy thư mục đích. Cảm ơn! –

+0

Chỉ nên có một thư mục có tên "Hiện tại" sẽ trỏ đến phiên bản mới nhất của bạn thay vì chỉ định cụ thể 4.2.0. '/ Library/Frameworks/Mono.framework/Phiên bản/Hiện tại/bin' Phải không? – NovaJoe

+0

Chính xác, **/Library/Frameworks/Mono.framework/Phiên bản/Hiện tại ** chỉ là một liên kết tượng trưng cho phiên bản mới nhất trong khung Mono. Các kịch bản cài đặt khác nhau thực sự gán 'đường dẫn được phiên bản' trực tiếp – SushiHangover

6

tôi đã xem trang này vì tôi cũng đã có vấn đề với việc cài đặt Mono (lần đầu tiên) trên El Capitan. Tôi thấy khuôn khổ đã được cài đặt nhưng các lệnh không được đưa vào/usr/local/bin. Liên kết chúng dường như không hoạt động vì tôi sẽ gặp lỗi khi cố gắng sử dụng lệnh mono và nó đang tìm kiếm các thư viện ở sai vị trí.

gì cuối cùng tôi thấy làm việc (bằng cách thử và sai) đã thiết lập $ PATH để khuôn khổ Mono sử dụng lệnh trong terminal:

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

Vì tôi không phải là một lập trình viên hoặc coder (ít nhất là không cho một thời gian dài và không bao giờ trên OS X), điều này cho phép tôi chạy Duplicati bằng cách sử dụng mono (đó là lý do tại sao tôi muốn nó ở nơi đầu tiên), nhưng tôi không chắc chắn nếu đây là cách chính xác để giải quyết điều này hoặc thậm chí nếu điều này nên được thực hiện ở tất cả. Bất kỳ ai có kinh nghiệm lập trình thực tế để nhận xét hoặc làm rõ?

+2

Chúng tôi có thể làm cho nó hoạt động bằng cách tạo ra một liên kết tượng trưng cho lệnh mono. 'ln -s /Library/Frameworks/Mono.framework/Versions/Current/bin/mono/usr/local/bin/mono' –

80

Trong OS X El Capitan, chạy sau trong ga để hỗ trợ mono lệnh

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

Nếu bạn không muốn phải gõ rằng mỗi khi bạn mở Terminal, sau đó thêm dòng vào '.bash_profile' trong thư mục chính của bạn. Giả sử bạn vẫn đang sử dụng bash, và nếu bạn đã thay đổi shell, thì bạn đã biết đủ để tìm ra cách thiết lập shell mới của mình. – zanedp

+3

điều này vẫn còn thực tế trong tháng 4 năm 2017 – sunsetjunks

12

Nó là tốt hơn để sử dụng xuất khẩu tiếp theo:

export PATH = $ PATH:/Library/Khung/Mono.framework/Phiên bản/Hiện tại/bin/

  1. Bạn không sửa đổi thứ tự trước của PATH (Nó rất quan trọng !!)
  2. Bạn sẽ sử dụng phiên bản hiện tại (khi cập nhật phiên bản nó không phải là cần thiết để thay đổi PATH biến)

Một tùy chọn khác (lựa chọn tốt nhất) là bao gồm một dòng mới vào cuối của tập tin /etc/đường dẫn với nội dung: /Library/Frameworks/Mono.framework/Versions/Current/bin

trong trường hợp này, con đường sẽ có sẵn cho tất cả người dùng trên hệ thống.

+0

Cảm ơn câu trả lời này. Điều này đã giúp tôi tìm thấy những gì đã sửa đổi $ PATH của tôi bên ngoài .zshrc của tôi và bất kỳ tệp có nguồn gốc nào. –

3

El Capitan tại bảo vệ các thư mục hệ thống nhất định trong chế độ "gốc rễ" (còn gọi là hệ thống bảo vệ toàn vẹn). Nếu bạn chạy lệnh ls -lO/System/Library/LaunchDaemons, bạn sẽ thấy rằng các thư mục và tệp dưới đó hiện được đánh dấu là "bị hạn chế".

Bạn có thể tắt chế độ rễ như thế này:

  1. Khởi động lại vào chế độ phục hồi (khởi động lại và giữ phím Cmd-R)
  2. Mở một terminal
  3. Sử dụng lệnh này: csrutil vô hiệu hóa

Khởi động lại và chạy lệnh đã hoạt động trước El Capitan

  1. Cài đặt phiên bản mới nhất của Mono.

Khi bạn đã hoàn tất, nó là rất khuyến khích mà bạn kích hoạt lại SIP bằng cách làm theo các bước tương tự, nhưng sử dụng csrutil bật trong bước 3.

Tôi chạy vào một vấn đề với các nguyên nhân gốc rễ tương tự trong khi cố gắng lấy các mô-đun lê/pecl và các ứng dụng macports/homebrew được cài đặt. Những người thường cần phải cài đặt các tập tin vào/usr/include và/usr/lib, mà bây giờ cũng bị hạn chế. Lưu ý: Các câu trả lời trước đây trên Internet về vấn đề này cung cấp cho bạn hướng dẫn sửa đổi cài đặt NVRAM, nhưng Apple tuyên bố rằng phương pháp NVRAM sẽ ngừng hoạt động với bản phát hành công khai của El Capitan. Bản phát hành GM đã vô hiệu hóa giải pháp NVRAM, vì vậy câu trả lời này sẽ giúp bạn có được những gì bạn cần trong tương lai.

5

Sau khi quá trình cài đặt đầu tiên của Mono Khung sử dụng brew cask tôi phát hiện ra rằng brew chính nó cung cấp Mono (!)

tôi gỡ bỏ cài đặt Mono đầu tiên.

$ brew cask uninstall mono-mdk 

Và đã cài đặt nó bằng cách sử dụng brew install mono và xóa tất cả thay đổi cấu hình trong ~/.zshrc.

Hình như nó đẹp hơn nhiều:

$ 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 

đầu tiên tôi sử dụng brew cask để cài đặt Mono Framework và phải thêm /Library/Frameworks/Mono.framework/Home/bin-PATH biến môi trường.

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

Kể từ khi tôi sử dụng oh-my-zsh tôi xác định MONO_HOME trong ~/.zshrc và điều chỉnh PATH phù hợp:

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

Với mono có sẵn:

$ 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

Điều này làm việc hoàn hảo cho tôi, tôi cũng sử dụng oh-my-zsh. Tôi sẽ thêm để đảm bảo 'nguồn ~/.zshrc' để có được các lệnh được cập nhật. – jamescampbell

1

nhanh Tóm tắt: Atm, khuôn khổ mono trình cài đặt chỉ hoạt động chính xác nếu bạn cài đặt nó vào thư mục gốc. Nó sẽ tự động thêm /Library/Frameworks/Mono.framework/Versions/Current/Commands vào $PATH, nhưng tôi không biết liệu bạn có cần thêm /Library/Frameworks/Mono.framework/Versions/Current/bin/ bằng tay hay không nếu mọi thứ hoạt động. (Commands là một liên kết tượng trưng đến bin, nhưng vẫn có thể không hoạt động)

Xem chi tiết hơn: Tôi vừa cài đặt đơn từ MonoFramework-MDK-4.8.0.520.macos10.xamarin.universal.pkg. Tôi đã cài đặt nó vào /Volumes/osxapps/ thay vì gốc, nhưng quá trình cài đặt vẫn mong đợi mọi thứ sẽ nằm trong thư mục gốc. Nó đã thêm /Library/Frameworks/Mono.framework/Versions/Current/Commands vào $PATH nhưng mọi thứ trong /Library/Frameworks/Mono.framework/ chỉ là các thư mục trống. Tất cả các tệp được lưu trú trong /Volumes/osxapps/Library/Frameworks/Mono.framework/.

Hơn nữa, rất nhiều những gì đã ở trong /Volumes/osxapps/Library/Frameworks/Mono.framework/ không phải là thư mục nhưng liên kết tượng trưng không hoạt động vì chúng mong muốn các thư mục nằm trong thư mục gốc. Ví dụ: Nếu mọi thứ đã được cài đặt trong thư mục gốc, /Library/Frameworks/Mono.framework/Versions/Current/Commands là một liên kết tượng trưng đến /Library/Frameworks/Mono.framework/Versions/Current/bin/Library/Frameworks/Mono.framework/Versions/Current/ cũng là một liên kết tượng trưng.

Tôi nói thêm:

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

để .bash_profile, trong ~/, cho phép tôi để chạy các lệnh/thực thi, nhưng tất cả đều chết với sai lầm vì họ vẫn còn mong đợi điều cần được root.

Vì vậy, tôi đã sao chép thư mục từ /Volumes/osxapps/Library/Frameworks đến /Library/Frameworks/ và giải quyết tất cả các lỗi và mọi thứ đang hoạt động bình thường nhưng bây giờ tôi có hai bản sao của Mono.framework và tôi không muốn nó được cài đặt trong thư mục gốc. root là trên một ssd, và không gian bị hạn chế.

Giải pháp tốt hơn là gỡ cài đặt đơn sắc theo hướng dẫn ở dưới cùng của this page và sau đó cài đặt lại trên root.

Tuy nhiên, tôi vẫn có thể cài đặt trên /Volumes/osxapps/ tốt hơn, nhưng tôi không biết cách tốt nhất để thực hiện điều đó. (Tôi có thể chỉ cần tạo lại một loạt các liên kết tượng trưng). Tôi sẽ nói với các dự án mono rằng trình cài đặt của họ mucks tất cả mọi thứ lên nếu bạn không cài đặt để root, nhưng tôi không chắc chắn cách tốt nhất để đi về làm điều đó một trong hai. Vì vậy, thay vào đó tôi đã đăng ở đây, với những gì tôi đã học được cho đến nay, với hy vọng rằng nó có thể giúp đỡ người khác.

Các vấn đề liên quan