CLR package guidelines (简体中文)

From ArchWiki
Jump to navigation Jump to search
翻译状态:本文是 CLR package guidelines翻译。上次翻译日期:2020-05-03。如果英文版本有所更改,则您可以帮助同步翻译。
Arch 软件包准则

32-bitCLRCMakeCrossDKMSEclipseElectronFontFree PascalGNOMEGoHaskellJavaKDEKernelLispMesonMinGWNode.jsNonfreeOCamlPerlPHPPythonRRubyRustVCSWebWine

本文档定义了在 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
  • 始终设置 archany。Mono 尚不支持编译(运行)64-bit 程序集。
  • 始终添加 !stripoptions
  • 如果程序包是一个库(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"
}