CLR package guidelines (Português)

From ArchWiki
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.
Status de tradução: Esse artigo é uma tradução de CLR package guidelines. Data da última tradução: 2018-10-31. Você pode ajudar a sincronizar a tradução, se houver alterações na versão em inglês.
Diretrizes de pacotes do Arch

32-bitCLRCMakeCrossDKMSEclipseElectronFonteFree PascalGNOMEGoHaskellJavaKDEKernelLispMesonMinGWNode.jsNonfreeOCamlPerlPHPPythonRRubyRustVCSWebWine

Este documento define o padrão para a empacotamento de projetos Common Language Runtime (.NET) sob Arch Linux. Atualmente, apenas o Mono é capaz de fornecer um runtime CLR usável e eficiente para vários sistemas e esse padrão refletirá seu uso. Esteja ciente de que muitos programas CLR foram desenvolvidos com o Microsoft .NET em mente e, como tal, podem ou não ser executados em Mono por causa de fatores exclusivos do .NET, como chamadas P/Invoke e APIs de Gestão Digital de Direitos (DRM) da Microsoft e, portanto, não produzirá um pacote utilizável para o Arch Linux. No entanto, se combinado com Wine a partir da versão 1.5.6 (?), seu pacote pode ter a chance de executar sob ele. Consulte as diretrizes de pacotes Wine para obter mais informações, se tal for o caso.

Pegadinhas de empacotamento

  • Sempre adicione mono a depends
  • Sempre defina arch como any. Mono não oferece suporte a compilar (executar?) montagens de 64 bits.
  • Sempre adicione !strip a options
  • Se o pacote é uma biblioteca (DLL), considere instalá-lo ao Global Assembly Cache (GAC) do Mono, se ele for usado como uma dependência.
  • Se a montagem é pré-compilada e vem com um arquivo de banco de dados para depuração de programas (Foo.dll.pdb), considere convertê-la como tal: pdb2mdb Foo.dll
  • Se o pacote destina-se a ser um executável (EXE), certifique-se de instalar em /usr/bin um shell script para executá-lo, similar a esse:
#!/bin/sh
mono foo.exe $@

Montagens assinadas

Se o pacote for instalado no GAC, certifique-se de ter um arquivo de chave assinado. Caso contrário, você pode gerar um como este: sn -k 1024 Foo.snk. Em seguida, a forma mais fácil de embutir o arquivo chave na montagem para ser desmontada assim: monodis Foo.dll --output=Foo.il. Após, remonte-o assim: ilasm /dll /key:Foo.snk Foo.il

Exemplos de PKGBUILD

Os exemplos a seguir vão tentar cobrir algumas das convenções mais comuns e sistemas de compilação.

xbuild

Unsigned 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"
}