Linux 的 Mono(tm) 二进制内核支持

要配置 Linux 自动执行基于 Mono 的 .NET 二进制文件(以 .exe 文件形式),而无需使用 mono CLR 包装器,可以使用 BINFMT_MISC 内核支持。

这将允许您在完成以下操作后像执行任何其他程序一样执行基于 Mono 的 .NET 二进制文件

  1. 您必须首先安装 Mono CLR 支持,可以通过下载二进制包、源代码 tarball 或从 Git 安装。可以在以下位置找到多个发行版的二进制包

    可以在以下位置找到编译 Mono 的说明

    安装 Mono CLR 支持后,只需检查 /usr/bin/mono(可能位于其他位置,例如 /usr/local/bin/mono)是否正常工作。

  2. 您必须将 BINFMT_MISC 编译为模块或编译到内核中 (CONFIG_BINFMT_MISC) 并正确设置它。如果您选择将其编译为模块,则必须使用 modprobe/insmod 手动插入它,因为 kmod 不容易支持 binfmt_misc。阅读此目录中的 binfmt_misc.txt 文件,以了解有关配置过程的更多信息。

  3. 将以下条目添加到 /etc/rc.local 或类似的脚本中,以便在系统启动时运行

    # Insert BINFMT_MISC module into the kernel
    if [ ! -e /proc/sys/fs/binfmt_misc/register ]; then
        /sbin/modprobe binfmt_misc
        # Some distributions, like Fedora Core, perform
        # the following command automatically when the
        # binfmt_misc module is loaded into the kernel
        # or during normal boot up (systemd-based systems).
        # Thus, it is possible that the following line
        # is not needed at all.
        mount -t binfmt_misc none /proc/sys/fs/binfmt_misc
    fi
    
    # Register support for .NET CLR binaries
    if [ -e /proc/sys/fs/binfmt_misc/register ]; then
        # Replace /usr/bin/mono with the correct pathname to
        # the Mono CLR runtime (usually /usr/local/bin/mono
        # when compiling from sources or CVS).
        echo ':CLR:M::MZ::/usr/bin/mono:' > /proc/sys/fs/binfmt_misc/register
    else
        echo "No binfmt_misc support"
        exit 1
    fi
    
  4. 检查是否可以直接从命令提示符直接启动 .exe 文件,而无需包装脚本即可运行 .exe 二进制文件,例如

    /usr/bin/xsd.exe
    

    注意

    如果此操作失败并显示权限被拒绝错误,请检查 .exe 文件是否具有执行权限。