32 位 – CLR – CMake – DKMS – Eclipse – Electron – Free Pascal – GNOME – Go – Haskell – Java – 交叉編譯工具 – KDE – Lisp – Meson – MinGW – 內核模塊 – Node.js – Nonfree – OCaml – Perl – PHP – Python – R – Ruby – Rust – VCS – Web – Wine – 字體
本文檔定義了在 Arch Linux 下打包 Common Language Runtime (.NET)項目的標準。當前,只有 Mono 能夠為多個系統提供可用的,高效的 CLR runtime,並且該標準將反映其用法。請注意,許多 CLR 程序是在考慮到 Microsoft .NET 的情況下開發的,因此,由於 P/Invoke 調用和 Microsoft 數字版權管理(DRM)API 等 .NET 專有的因素,它們可能在 Mono 下運行,也可能無法在 Mono 下運行。因此不會為 Arch Linux 提供可用的軟體包。但是,如果與 1.5.6 版(?)或更高版本的 Wine 結合使用,則您的程序包可能有機會在其下運行。如果是這種情況,請參閱 Wine PKGBUILD Guidelines 以獲取更多信息。
打包注意
- 始終將 mono包 添加到
depends - 始終設置
arch為any。Mono 尚不支持編譯(運行)64-bit 程序集。 - 始終添加
!strip到options - 如果程序包是一個庫(DLL),則要將該程序包用作依賴項,請考慮將其安裝到 Mono 的全局程序集緩存(GAC)中。
- 如果程序集是預編譯的,並且帶有程序調試資料庫文件(Foo.dll.pdb),請考慮將其轉換為:{ic|pdb2mdb Foo.dll}}
- 如果要執行該程序包(EXE),請確保安裝到
/usr/bin,使用 shell 腳本以運行它,類似於以下程序:
#!/bin/sh mono foo.exe "$@"
簽名的程序集
如果要將軟體包安裝到 GAC 中,請確保它具有簽名的密鑰文件。如果沒有,您可以生成一個這樣的:sn -k 1024 Foo.snk。隨後,嵌入密鑰文件到組件的最簡單方法是拆卸它,是這樣的:monodis Foo.dll --output=Foo.il。然後,像這樣重新組裝它:ilasm /dll /key:Foo.snk Foo.il
PKGBUILD 示例
以下示例將嘗試涵蓋一些最常見的約定和構建系統。
xbuild
未簽名的 DLL
# Maintainer: yourname <yourmail>
pkgname=foo
pkgver=1.0
pkgrel=1
pkgdesc="Fantabulous library for .Net"
arch=('any')
url="http://www.foo.bar"
license=('GPL')
depends=('mono')
options=('!strip')
source=("http://www.foo.bar/foobar.tar.gz")
md5sums=('4736ac4f34fd9a41fa0197eac23bbc24')
build() {
cd "${srcdir}/foobar"
xbuild Foo.sln
# if the package is unsigned, do the following:
cd "/bin/x86/Debug"
monodis Foo.dll --output=Foo.il
sn -k 1024 Foo.snk
ilasm /dll /key:Foo.snk Foo.il
}
package() {
cd "${srcdir}/foobar/bin/x86/Debug"
install -Dm644 Foo.dll "$pkgdir/usr/lib/foobar/Foo.dll"
install -Dm644 Foo.dll.mdb "$pkgdir/usr/lib/foobar/Foo.dll.mdb"
# Register assembly into Mono's GAC
gacutil -i Foo.dll -root "$pkgdir/usr/lib"
}