Compartilhar via


Configuração personalizada do Linker

Se o conjunto padrão de opções não for o suficiente, faça o processo de vinculação com um arquivo XML que descreve o que você deseja do vinculador.

Você pode fornecer definições extras para o vinculador para garantir que o tipo, os métodos e/ou os campos não sejam eliminados do seu aplicativo. Em seu próprio código, o modo preferido é usar o atributo personalizado [Preserve], conforme discutido nos guias Vinculação no iOS e Vinculação no Android. No entanto, se você precisar de algumas definições dos assemblies do SDK ou do produto, a melhor solução para você poderá ser usar um arquivo XML (em vez de adicionar código que garantirá que o vinculador não eliminará itens de que você precise).

Para fazer isso, você define um arquivo XML com o elemento de nível superior <linker>, que contém nós de assembly que, por sua vez, contêm nós de tipo que, por sua vez, contêm nós de método e de campo.

Quando você tiver esse arquivo de descrição de vinculador, adicione-o ao seu projeto e:

  • Para Android : defina a Ação de Build como LinkDescription
  • Para iOS : defina a Ação de Build como LinkDescription

O exemplo a seguir mostra a aparência do arquivo 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>

No exemplo acima, o vinculador lerá e aplicará as instruções aos assemblies mscorlib.dll (fornecido com o Mono para Android) e My.Own.Assembly (código do usuário).

A primeira seção, para mscorlib.dll, garantirá que o tipo System.Environment preservará seu campo denominado mono_corlib_version e seu método get_StackTrace. Observe que os nomes de método getter e/ou setter devem ser usados, pois o vinculador funciona em IL e não entende propriedades do C#.

A segunda seção, para My.Own.Assembly.dll, garantirá que o tipo Foo preservará todos os seus campos (ou seja, o atributo preserve="fields") e todos os seus construtores (ou seja, todos os métodos chamados .ctor em IL). O tipo Bar preservará assinaturas específicas (não nomes) para um construtor (que aceita um único parâmetro de cadeia de caracteres) e para um campo de cadeia de caracteres específica _blah. O namespace My.Own.Namespace preservará todos os tipos que ele contém. Por fim, qualquer tipo cujo nome completo (incluindo o namespace) corresponda ao padrão curinga "My.Other*" preservará todos os seus campos e métodos. O caractere curinga * pode ser incluído várias vezes dentro de um padrão "tipo nomecompleto".