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

From ArchWiki
Jump to navigation Jump to search

Этот документ определяет стандарты для создания пакетов 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