Konfiguracja konsolidatora niestandardowego
Jeśli domyślny zestaw opcji nie jest wystarczający, możesz prowadzić proces łączenia z plikiem XML, który opisuje, czego chcesz użyć z konsolidatora.
Możesz podać dodatkowe definicje konsolidatorowi, aby upewnić się, że typ, metody i/lub pola nie zostaną wyeliminowane z aplikacji. We własnym kodzie preferowanym sposobem jest użycie atrybutu niestandardowego [Preserve]
, zgodnie z opisem w przewodnikach Łączenie w systemie iOS i Łączenie w systemie Android .
Jeśli jednak potrzebujesz pewnych definicji z zestawu SDK lub zestawów produktów, użycie pliku XML może być najlepszym rozwiązaniem (w porównaniu z dodawaniem kodu, który zapewni konsolidatorowi, że nie usunie potrzebnych elementów).
W tym celu należy zdefiniować plik XML z elementem <linker>
najwyższego poziomu, który zawiera węzły zestawu , które z kolei zawierają węzły typu , które z kolei zawierają metody i węzły pól .
Po utworzeniu tego pliku opisu konsolidatora dodaj go do projektu i:
- W przypadku systemu Android: ustaw akcję kompilacji na LinkDescription
- W przypadku systemu iOS ustaw akcję kompilacji na LinkDescription
W poniższym przykładzie pokazano, jak wygląda plik 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>
W powyższym przykładzie konsolidator odczytuje i zastosuje instrukcje dotyczące mscorlib.dll
zestawów (dostarczanych z rozwiązaniem Mono dla systemu Android) i My.Own.Assembly
(kod użytkownika).
Pierwsza sekcja dla mscorlib.dll
elementu zapewni, że System.Environment
typ zachowa jego pole o nazwie mono_corlib_version
i jego get_StackTrace
metodę.
Zwróć uwagę, że nazwy metod getter i/lub setter muszą być używane, ponieważ konsolidator działa w języku IL i nie rozumie właściwości języka C#.
Druga sekcja , dla My.Own.Assembly.dll
, zapewni, że Foo
typ zachowa wszystkie pola (tj. preserve="fields"
atrybut) i wszystkie jego konstruktory (tj. wszystkie metody o nazwie .ctor
w IL). Typ Bar
zachowa określone podpisy (nie nazwy) dla jednego konstruktora (który akceptuje pojedynczy parametr ciągu) i dla określonego pola _blah
ciągu .
My.Own.Namespace
Przestrzeń nazw zachowa wszystkie zawarte w nim typy.
Na koniec każdy typ, którego pełna nazwa (w tym przestrzeń nazw) jest zgodna ze wzorcem symboli wieloznacznych "My.Other*", zachowa wszystkie jego pola i metody. Symbol wieloznaczny *
może być dołączany wiele razy w ramach wzorca "type fullname".