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.