Vlastní konfigurace linkeru

Pokud výchozí sada možností nestačí, můžete proces propojení řídit pomocí souboru XML, který popisuje, co potřebujete z linkeru.

Linkeru můžete poskytnout další definice, abyste zajistili, že typ, metody nebo pole nebudou z vaší aplikace vyloučeny. Upřednostňovaným způsobem vlastního kódu je použití vlastního [Preserve] atributu, jak je popsáno v průvodcích Propojování v iOSu a Propojování v Androidu . Pokud ale potřebujete některé definice ze sady SDK nebo sestavení produktů, může být nejlepším řešením použití souboru XML (místo přidání kódu, který zajistí, že linker neodstraní to, co potřebujete).

K tomu definujete soubor XML s elementem <linker> nejvyšší úrovně, který obsahuje uzly sestavení , které zase obsahují uzly typu , které zase obsahují metody a uzly polí .

Jakmile budete mít tento soubor popisu linkeru, přidejte ho do projektu a:

  • Pro Android : Nastavení akce sestavení na LinkDescription
  • Pro iOS : Nastavení akce sestavení na LinkDescription

Následující příklad ukazuje, jak vypadá soubor XML:

<linker>
        <assembly fullname="mscorlib">
                <type fullname="System.Environment">
                        <field name="mono_corlib_version" />
                        <method name="get_StackTrace" />
                </type>
        </assembly>
        <assembly fullname="My.Own.Assembly">
                <type fullname="Foo" preserve="fields">
                        <method name=".ctor" />
                </type>
                <type fullname="Bar">
                        <method signature="System.Void .ctor(System.String)" />
                        <field signature="System.String _blah" />
                </type>
                <namespace fullname="My.Own.Namespace" />
                <type fullname="My.Other*" />
        </assembly>
</linker>

V předchozím příkladu si linker přečte a použije pokyny k mscorlib.dll sestavením (dodávaná s Mono pro Android) a My.Own.Assembly (uživatelským kódem).

První část, pro mscorlib.dll, zajistí, že System.Environment typ zachová své pole pojmenované mono_corlib_version a jeho get_StackTrace metodu. Všimněte si, že názvy metod getter a/nebo setter musí být použity, protože linker funguje v IL a nerozumí vlastnostem jazyka C#.

Druhá část , pro My.Own.Assembly.dll, zajistí, že Foo typ zachová všechna jeho pole (tj. preserve="fields" atribut) a všechny jeho konstruktory (tj. všechny metody pojmenované .ctor v IL). Typ Bar zachová konkrétní podpisy (nikoli názvy) pro jeden konstruktor (který přijímá jeden řetězcový parametr) a pro konkrétní pole _blahřetězce . Obor My.Own.Namespace názvů zachová všechny typy, které obsahuje. Nakonec jakýkoli typ, jehož úplný název (včetně oboru názvů) odpovídá vzoru se zástupným znakem "My.Other*", zachová všechna jeho pole a metody. Zástupný znak * lze do vzoru "type fullname" zahrnout vícekrát.