CLR package guidelines (Português) - ArchWiki

Jump to content
From ArchWiki
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.

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

Category:

- Arch package guidelines (Português)