CLR package guidelines (Русский) - ArchWiki

Jump to content
From ArchWiki

Этот документ определяет стандарты для создания пакетов Common Language Runtime (.NET) для Arch Linux. На текущий момент только Mono способен обеспечить эффективный и работоспособный запуск CLR в смешанных системах. Будьте внимательны - большинство CLR программ разработанных в среде Microsoft .NET могут не запустится в Mono, так как содержат платформозависимые .NET-факторы: вызовы P/Invoke и Microsoft DRM API (цифровые средства защиты авторских прав). Однако, в связке с Wine (версия 1.5.6 и выше), у Вас есть некоторая вероятность запустить ваше приложение. Для получения информации смотрите Wine PKGBUILD Guidelines.

## Подготовка к сборке пакетов

- Всегда добавляйте mono в `depends`
- Всегда выставляйте `arch` в `any`. Mono не поддерживает сборку (запуск) 64-битных приложений.
- Всегда добавляйте `!strip` в `options`
- Если Вы собираете библиотеку (DLL), которая будет установлена в Mono's global assembly cache (GAC), добавте GAS в зависимости (к пакету) .
- Если приложение/библиотека поставляется с отладочной базой данных (program debug database file, Foo.dll.pdb), переконвертируйте её: `pdb2mdb Foo.dll`
- Если Вы собираете приложение (EXE), убедитесь в том, что добавили скрипт для запуска в `/usr/bin`. Пример скрипта:

    #!/bin/sh
    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 "${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"
    }

### NAnt

### Prebuild

Category:

- Arch package guidelines (Русский)