Vlastní konfigurace linkeru

Pokud výchozí sada možností není dostatečná, můžete proces propojení zařídit pomocí souboru XML, který popisuje, co požadujete od linkeru.

Můžete poskytnout další definice linkeru, aby se zajistilo, že typ, metody a/nebo pole nebudou z vaší aplikace eliminovány. V vlastním kódu upřednostňovaný způsob je použití [Preserve] vlastního atributu, jak je popsáno v tématu [Preserve] a propojování s průvodci pro Android . Nicméně pokud potřebujete nějaké definice ze sady SDK nebo sestavení produktu, pak použití souboru XML může být nejlepším řešením (oproti přidání kódu, který zajistí, aby linker neeliminoval, co potřebujete).

Chcete-li to provést, definujte soubor XML s prvkem nejvyšší úrovně <linker> , který obsahuje uzly <linker> , které zase obsahují uzly typu , které zase obsahují metody a uzly polí .

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

  • Pro Android : nastavte akci sestavení na LinkDescription
  • Pro iOS : nastavte akci sestavení na LinkDescription

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

<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 linker přečte a použije pokyny v mscorlib.dll sestaveních (dodávané s mono pro Android) a My.Own.Assembly (uživatelský kód).

První oddíl pro mscorlib.dll , zajistí, že System.Environment typ zachová pole s názvem mono_corlib_version a jeho get_StackTrace metodou. Všimněte si, že názvy metod getter nebo setter se musí použít, protože linker funguje na 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 s názvem .ctor v Il). BarTyp zachová konkrétní signatury (nikoli názvy) pro jeden konstruktor (který přijímá jeden řetězcový parametr) a pro konkrétní pole řetězce _blah . My.Own.NamespaceObor názvů bude uchovávat všechny typy, které obsahuje. Nakonec jakýkoli typ, jehož úplný název (včetně oboru názvů) odpovídá vzoru zástupného znaku "My. other *" zachová všechna jeho pole a metody. Zástupný znak * může být ve vzorku "typ FullName" zahrnut několikrát.