【问题标题】:How to install Mono on macOS so mono works in terminal?如何在 macOS 上安装 Mono,以便 Mono 在终端中工作?
【发布时间】:2015-12-09 03:22:16
【问题描述】:

我正在尝试在 Mac(OS X 版本 10.10.5)上运行 Mono 安装,虽然安装表明它已成功完成,但我无法从终端调用 mono。

为了安装它,我以 root 身份运行了 uninstallMono.sh 以确保我们没有任何剩余的东西,然后运行 ​​MonoFramework-MDK-4.0.4.1.macos10.xamarin.x86.pkg。安装程序似乎成功完成,但尝试调用单声道返回

-bash:单声道:找不到命令

似乎确实安装了单声道框架:

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

...但它在 /usr/bin 中不存在,并且尝试使用 which mono 查找其可执行文件不会返回任何内容。

【问题讨论】:

    标签: macos mono


    【解决方案1】:

    更新(因为两年多后仍然有浏览量):

    最新版本的 Mono (5.x) 安装过程会在 /etc/paths.d 中创建一个文件 (mono-commands),其中包含以下路径:

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

    所以/usr/local/bin 不再使用...

    原创

    较新版本的 mono 符合“El Capitan”要求,即不在 /usr/bin 中安装任何东西,因此现在使用 /usr/local/bin。我不确定从哪个 mono 4.x 版本开始...

    但我会假设您的路径中没有 /usr/local/bin(?),请尝试:

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

    就我而言,我安装了 4.2.0:

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

    【讨论】:

    • 事实证明这非常正确。 usr/local/bin 在我的机器上根本不存在。创建它并在 usr/local 上调用 chmod 777,然后重新安装 mono 来处理它。以前,mono 试图安装到 usr/local/bin,但在找不到目标目录时会默默失败。谢谢!
    • 应该只有一个名为“Current”的文件夹,它将指向您的最新版本,而不是专门指定 4.2.0。 /Library/Frameworks/Mono.framework/Versions/Current/bin 对吗?
    • 正确,/Library/Frameworks/Mono.framework/Versions/Current 只是指向 Mono 框架中最新版本的符号链接。各种安装脚本实际上直接分配“版本化路径”
    • 所以mono 的完整路径是/Library/Frameworks/Mono.framework/Versions/Current/bin/mono,对吗?
    • 我安装了 Mono 5.10,在命令行中完美运行,但我编写了一个在 Mac 上运行并使用 Mono 的 Java 应用程序,但它给了我错误:安装 Mono 框架。我已将 Mono 的命令和 bin 文件夹添加到路径中,但似乎 Mono 在终端之外无法访问。
    【解决方案2】:

    我一直在看这个页面,因为我在 El Capitan 上安装 Mono(第一次)时也遇到了问题。我发现框架已安装,但命令未放入 /usr/local/bin。对它们进行符号链接似乎不起作用,因为我在尝试使用 mono 命令时会出错,并且它在错误的位置寻找库。

    我最终发现的工作(通过反复试验)是使用终端中的命令将 $PATH 设置为 Mono 框架:

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

    由于我不是程序员或编码员(至少在很长一段时间内都不是,而且从不在 OS X 上),这让我可以使用单声道运行 Duplicati(这就是我一开始想要它的原因),但我'不确定这是否是解决此问题的正确方法,或者是否应该这样做。任何有实际编程经验的人来评论或澄清?

    【讨论】:

    • 我们能够通过创建指向 mono 命令的符号链接来使其工作。 ln -s /Library/Frameworks/Mono.framework/Versions/Current/bin/mono /usr/local/bin/mono
    【解决方案3】:

    在 OS X El Capitan 中,在 Terminal 中运行以下命令以支持 mono 命令

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

    【讨论】:

    • 如果您不想在每次打开终端时都输入,然后将该行添加到主目录中的.bash_profile。假设您仍在使用 bash,并且如果您更改了 shell,那么您已经知道如何设置新的 shell。
    • 一年后的 2018 年 4 月仍然有效。添加到 .bash_profile 是要走的路。
    【解决方案4】:

    最好使用下一个导出:

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

    1. 不要修改PATH之前的顺序(非常 重要!!)
    2. 您将使用当前版本(更新时 不需要更改变量 PATH 的版本)

    另一个选项(最佳选项)是在文件 /etc/paths 的末尾添加一个新行,内容如下: /Library/Frameworks/Mono.framework/Versions/Current/bin

    在这种情况下,路径将可供系统上的所有用户使用

    【讨论】:

    • 感谢您的回答。这帮助我找到了在我的 .zshrc 和任何源文件之外修改我的 $PATH 的内容。
    【解决方案5】:

    尝试安装旧版本。 3.4.0 为我工作 OSX (10.10.5)..

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

    【讨论】:

      【解决方案6】:

      El Capitan 现在以“无根”模式保护某些系统目录(也称为系统完整性保护)。如果你运行命令 ls -lO /System/Library/LaunchDaemons 你会看到那里的目录和文件现在被标记为“restricted”。

      您可以像这样禁用无根模式:

      1. 重启进入恢复模式(重启并按住 Cmd-R)
      2. 打开终端
      3. 使用此命令:csrutil disable

      重新启动并运行在 El Capitan 之前有效的命令

      1. 安装 Mono 最新版本。

      完成后,强烈建议您按照相同的步骤重新启用 SIP,但在步骤 3 中使用 csrutil enable。

      我在尝试安装 pear/pecl 模块和 macports/homebrew 应用程序时遇到了具有相同根本原因的问题。那些通常需要将文件安装到 /usr/include 和 /usr/lib 中,现在它们也受到限制。

      注意:互联网上有关此问题的先前答案为您提供了修改 NVRAM 设置的说明,但 Apple 表示 NVRAM 方法将停止与 El Capitan 的公开版本一起使用。 GM 版本已经禁用了 NVRAM 解决方法,所以这个答案应该能让你得到你需要的东西。

      【讨论】:

        【解决方案7】:

        在第一次使用brew cask 安装 Mono 框架后,我发现brew 本身提供了 Mono (!)

        我先卸载了 Mono。

        $ brew cask uninstall mono-mdk
        

        并使用brew install mono 安装它并删除~/.zshrc 中的所有配置更改。

        看起来好多了:

        $ 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
        

        我第一次使用brew cask安装Mono Framework,不得不将/Library/Frameworks/Mono.framework/Home/bin添加到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!
        

        由于我使用oh-my-zsh,我在~/.zshrc 中定义了MONO_HOME,并相应地调整了PATH

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

        mono 可用:

        $ 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
        

        【讨论】:

        • 这对我来说非常有效,我也使用 oh-my-zsh。我会添加以确保source ~/.zshrc 以获取更新的命令。
        • 是修复它的原因。出于某种原因,/etc/paths.d 没有被我系统上的任何东西使用,所以添加的mono-commands 条目被忽略了。这为我解决了所有问题,包括 Unity intellisense/autocompletion 无法正常工作的 Visual Studio Code。令人惊讶的是,brew 版本是最新的。谢谢!
        【解决方案8】:

        快速总结: Atm,mono 框架安装程序只有在您将其安装到 root 时才能正常工作。它会自动将/Library/Frameworks/Mono.framework/Versions/Current/Commands 添加到$PATH,但我不知道您是否需要手动添加/Library/Frameworks/Mono.framework/Versions/Current/bin/ 或者一切正常。 (Commands 是指向bin 的符号链接,但它仍然可能不起作用)

        更深入: 我最近从MonoFramework-MDK-4.8.0.520.macos10.xamarin.universal.pkg 安装了单声道。我将它安装到/Volumes/osxapps/ 而不是root,但安装仍然希望一切都在root 中。它将/Library/Frameworks/Mono.framework/Versions/Current/Commands 添加到$PATH,但/Library/Frameworks/Mono.framework/ 中的所有内容都只是空目录。所有文件都驻留在/Volumes/osxapps/Library/Frameworks/Mono.framework/.

        此外,/Volumes/osxapps/Library/Frameworks/Mono.framework/ 中的很多内容(包括Commands)都不是文件夹,而是无效的符号链接,因为他们希望文件夹位于根目录中。例如:如果一切都安装在根目录下, /Library/Frameworks/Mono.framework/Versions/Current/Commands 是指向 /Library/Frameworks/Mono.framework/Versions/Current/bin 的符号链接,/Library/Frameworks/Mono.framework/Versions/Current/ 也是符号链接。

        我补充说:

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

        .bash_profile,在~/,它允许我运行命令/可执行文件,但它们都因错误而死,因为它们仍然期望东西在根目录中。

        所以我将文件夹从 /Volumes/osxapps/Library/Frameworks 复制到 /Library/Frameworks/ 并解决了所有错误并且一切正常,但现在我有两个 Mono.framework 副本,我不希望它首先安装在 root 中地方,因为root在ssd上,空间有限。

        更好的解决方案是根据this page 底部的说明卸载mono,然后在root 上重新安装。

        但是,对我来说,安装在/Volumes/osxapps/ 上仍然会更好,但我不知道最好的方法。 (我可能只是重新创建一堆符号链接)。我打算告诉 mono-project,如果你不安装到 root,他们的安装程序会搞砸一切,但我也不确定最好的方法。所以,我在这里发布了我到目前为止所学到的东西,希望它可以帮助其他人。

        【讨论】:

          【解决方案9】:
          1. 打开 .bash_profile

          2. export PATH=$PATH:/Library/Frameworks/Mono.framework/Versions/Current/Commands 添加到它

          3. 完成!

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2015-07-11
            • 1970-01-01
            • 1970-01-01
            • 2011-12-17
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-03-25
            相关资源
            最近更新 更多