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.dllelementu 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 _blahcią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".