出自 Arch Linux 中文维基

摘自 Wikipedia

Mono is a [...] project to create a .NET Framework-compatible set of tools including, among others, a C# compiler and a Common Language Runtime.

安裝

安裝 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 集成開發環境。如果不是AUR 安裝 Rider,則需要安裝 mono-msbuild,因為最近的 Rider 版本放棄了對 xbuild 的支持,轉而使用來自 net-core 的 MSBuild。

如果需要 API 文檔瀏覽器以及一些測試和開發工具,則必須安裝 mono-tools

問題解決

當我嘗試直接運行 Mono 二進位文件時,我遇到了一個錯誤: 「cannot execute binary file」

Mono的 binfmt_misc 處理程序尚未建立,Mono Project website 上有詳細說明。

要解決這個問題,restart 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 軟體包的一部分。

參見