This document defines the standard for packaging Common Language Runtime (.NET) projects under Arch Linux. Currently only Mono is capable of providing a usable, efficient CLR runtime for multiple systems and this standard will reflect its use. Be aware that a lot of CLR programs were developed with Microsoft .NET in mind and, as such, may or may not run under Mono because of .NET-exclusive factors such as P/Invoke calls and Microsoft digital rights management (DRM) APIs and are thus will not yield a usable package for Arch Linux. However, if combined with Wine as of version 1.5.6 (?), your package may have a chance to run under it. Please see the Wine PKGBUILD Guidelines for more information if such is the case.

Contents

Packaging gotchas

Always set arch to any. Mono does not yet support compiling (running?) 64-bit assemblies.

Always add !strip to options

If the package is a library (DLL), consider installing it to Mono's global assembly cache (GAC) if it is to be used as a dependency.

If the assembly is precompiled and comes with a program debug database file (Foo.dll.pdb), consider converting it as such: pdb2mdb Foo.dll

If the package is meant to be executed (EXE), be sure to install to /usr/bin a shell script to run it, similar to this one:

#!/bin/sh
mono foo.exe $@

Signed assemblies

If the package is to be installed into the GAC, be sure it has a signed key file. If not, you can generate one like this: sn -k 1024 Foo.snk. Following that, the easiest way to embed the key file into the assembly is to disassemble it like this: monodis Foo.dll --output=Foo.il. Afterwards, reassemble it like so: ilasm /dll /key:Foo.snk Foo.il

Sample PKGBUILDs

The following examples will try to cover some of the most common conventions and build systems.