# CLR package guidelines (简体中文)

From ArchWiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
翻译状态：本文是 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 (简体中文)