CLR 软件包指南

出自 ArchWiki
Arch 软件包指南

32 位CLRCMake交叉编译DKMSEclipseElectron字体Free PascalGNOMEGoHaskellJavaKDE内核模块LispMesonMinGWNode.js非自由软件OCamlPerlPHPPythonRRubyRust - 安全ShellVCSWebWine

本文档定义了 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"
}