CLR package guidelines (简体中文)
32-bit – CLR – CMake – Cross – DKMS – Eclipse – Electron – Font – Free Pascal – GNOME – Go – Haskell – Java – KDE – Kernel – 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" }