Mono

出自 ArchWiki

出自 维基百科

Mono 是一个旨在创建与 .NET Framework 兼容的工具集的 [...] 项目,其中包括 C# 编译器和 通用语言运行时等。

安装

安装 mono 软件包。

如果您需要 VisualBasic.Net 支持,您必须安装带有软件包 mono-basicAUR 的 VisualBasic.Net 解释器。

注意: 安装软件包会将证书颁发机构存储在 /usr/share/.mono/certs/Trust/ 中,但删除软件包不会删除它们。[1]

运行 Mono 应用程序

您可以通过手动调用 mono 来执行 Mono 二进制文件

$ mono programsname.exe

您也可以像执行原生二进制文件一样直接执行 Mono 二进制文件

$ chmod 755 exefile.exe
$ ./exefile.exe

测试 Mono

创建一个新文件

test.cs
using System;

public class Test {
 public static void Main(string[] args) {
  Console.WriteLine("Hello World!");
 }
}

然后运行

$ mcs test.cs
$ mono test.exe
Hello world!

开发

OmniSharp 为多种编辑器提供 .NET/Mono 开发插件/集成,包括 VimEmacsVisual Studio Code

或者,您可以安装 riderAUR IDE。如果您不是AUR 安装 Rider,您将需要安装 mono-msbuild,因为最近的 Rider 版本放弃了对 xbuild 的支持,转而支持来自 net-core 的 MSBuild。

如果您想要 API 文档浏览器以及一些测试和开发工具,您必须安装 mono-tools

故障排除

当我尝试直接运行 Mono 二进制文件时,出现错误:“无法执行二进制文件”

Mono 的 binfmt_misc 处理程序尚未设置,如 Mono 项目网站上详细解释的那样。

要解决此问题,重启 systemd-binfmt 服务。

我收到 TLS 握手(或类似的基于证书)错误

这可能是由 Mono 的证书存储中缺少证书,或 Mono 的证书存储中残留过时损坏的证书引起的。

如果可能,通过运行 curl -vI 或类似命令在 Mono 外部复制失败的请求,确保系统证书存储状态良好。

  • cert-sync /etc/ssl/certs/ca-certificates.crt 将 mono 存储与系统存储同步,添加缺少的证书。
  • 要删除损坏的证书(即,如果以上方法没有帮助),请删除目录 /usr/share/.mono,然后重新运行 cert-sync /etc/ssl/certs/ca-certificates.crt
  • 作为最后的手段,较旧的工具 mozroots --import --ask-remove 绕过系统证书存储,直接下载 Mozilla 的信任存储。同样,这不会删除损坏的证书,如果您依赖私有 CA,可能会导致其他问题。

cert-syncmozroots 都是 mono 软件包的一部分。

参见