跳转至内容

CLR软件包指南

来自 ArchWiki
Arch 软件包指南

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

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

© . This site is unofficial and not affiliated with Arch Linux.

Content is available under GNU Free Documentation License 1.3 or later unless otherwise noted.