CLR package guidelines (简体中文) - ArchWiki

Jump to content

# CLR package guidelines (简体中文)

From ArchWiki
翻译状态：本文是 CLR package guidelines 的翻译。上次翻译日期：2020-05-03。如果英文版本有所更改，则您可以帮助同步翻译。

本文档定义了在 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`
- 始终设置 `arch` 为 `any`。Mono 尚不支持编译（运行）64-bit 程序集。
- 始终添加 `!strip` 到 `options`
- 如果程序包是一个库（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"
    }

Category:

- Arch package guidelines (简体中文)