CLR软件包指南
外观
本文档定义了在 Arch Linux 上打包通用语言运行时 (.NET) 项目的标准。目前只有 Mono 能够为多系统提供可用、高效的 CLR 运行时,本标准将反映其使用。请注意,许多 CLR 程序是为 Microsoft .NET 设计的,因此可能因为 P/Invoke 调用和 Microsoft 数字版权管理 (DRM) API 等 .NET 独有的因素而在 Mono 下运行,从而无法为 Arch Linux 生成可用的软件包。但是,如果与 Wine 结合使用(从 1.5.6 版本开始?),您的软件包可能有机会在其下运行。如果是这种情况,请参阅 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
示例 PKGBUILDs
以下示例将尝试涵盖一些最常见的约定和构建系统。
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"
}