CLR 软件包指南
32 位 – CLR – CMake – 交叉编译 – DKMS – Eclipse – Electron – 字体 – Free Pascal – GNOME – Go – Haskell – Java – KDE – 内核模块 – Lisp – Meson – MinGW – Node.js – 非自由软件 – OCaml – Perl – PHP – Python – R – Ruby – Rust - 安全 – Shell – VCS – Web – Wine
本文档定义了 Arch Linux 下打包 Common Language Runtime (.NET) 项目的标准。目前只有 Mono 能够为多个系统提供可用、高效的 CLR 运行时,此标准将反映其使用。请注意,许多 CLR 程序是考虑到 Microsoft .NET 而开发的,因此,由于 .NET 独有的因素(例如 P/Invoke 调用和 Microsoft 数字版权管理 (DRM) API),它们可能无法在 Mono 下运行,因此不会为 Arch Linux 生成可用的软件包。但是,如果与 1.5.6 (?) 版本起的 Wine 结合使用,您的软件包可能有机会在它之下运行。如果属于这种情况,请参阅 Wine PKGBUILD 指南 以获取更多信息。
打包注意事项
- 始终将 mono 添加到
depends
- 始终将
arch
设置为any
。Mono 尚不支持编译(运行?)64 位程序集。 - 始终将
!strip
添加到options
- 如果软件包是库 (DLL),如果它要用作依赖项,请考虑将其安装到 Mono 的全局程序集缓存 (GAC)。
- 如果程序集是预编译的并且附带程序调试数据库文件 (Foo.dll.pdb),请考虑按如下方式转换它:
pdb2mdb Foo.dll
- 如果软件包旨在执行 (EXE),请务必在
/usr/bin
中安装一个 shell 脚本来运行它,类似于这个脚本
#!/bin/sh exec 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 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 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" }