Xamarin / MonoTouch: Não foi possível compilar no modo "Link SDK only" devido à falta de símbolos

Estou tentando compilar meu aplicativo iOS usando o MonoTouch no modo Link SDK only. Compila completamente bem se eu desativar o link completamente, mas também produz um binário colossal que não é adequado para o modo de liberação.

Infelizmente, uma das bibliotecas de que preciso, de alguma forma, chama Expression.Visit e não consigo descobrir como instruir o vinculador para não removê-lo. Isso resulta neste erro de compilação:

Erro MT2002: falha ao resolver a referência "System.Linq.Expressions.Expr, ession System.Linq.Expressions.ExpressionVisitor :: Visit (System.Linq.Expressions.Expression)" da referência "System.Core, Versão = 2.0.5.0, Cultura = neutro, PublicKeyToken = 7cec85d7bea7798e "(MT2002) (MyApp)

Conformea documentação sobre vinculação personalizada, Configurei um arquivo vinculador para tentar impedir que isso aconteça:

<?xml version="1.0" encoding="UTF-8" ?>
<linker>
  <assembly fullname="System.Core">
    <type fullname="System.Linq.Expressions.ExpressionVisitor">
      <method signature="System.Linq.Expressions.Expression Visit(System.Linq.Expressions.Expression)" />
    </type>
  </assembly>
</linker>

Infelizmente, isso não tem nenhum efeito - o erro acontece como antes.

A documentação menciona umpreserve="fields" parâmetro que eu posso fornecer para<type>, então eu tentei isso:

<?xml version="1.0" encoding="UTF-8" ?>
<linker>
  <assembly fullname="System.Core">
    <type fullname="System.Linq.Expressions.ExpressionVisitor" preserve="methods" />
  </assembly>
</linker>

Isso também não funcionou.

Em seguida, introduzi um erro de sintaxe XML no arquivo e a compilação falhou, dizendo que não era possível analisar o arquivo vinculador, pelo menos sei que o arquivo está sendo lido.

Mas tentei introduzir erros no nome do assembly:

<?xml version="1.0" encoding="UTF-8" ?>
<linker>
  <assembly fullname="NonexistentAssembly">
  </assembly>
</linker>

Isso causou um erro, reclamando que a montagem não pôde ser resolvida.

Tentei então alterar o nome do tipo:

<?xml version="1.0" encoding="UTF-8" ?>
<linker>
  <assembly fullname="System.Core">
    <type fullname="NonExistentType" preserve="methods" />
  </assembly>
</linker>

Agora, isso começou a mostrar o mesmo erro "incapaz de resolver o expressionvisitor :: visit" que eu estava vendo antes. Parece que os nomes dos tipos não estão marcados.

Além disso, nenhum dos nomes de assinatura é apresentado, pois também apresentou o mesmo erro de compilação.

<?xml version="1.0" encoding="UTF-8" ?>
<linker>
  <assembly fullname="System.Core">
    <type fullname="System.Linq.Expressions.ExpressionVisitor">
      <method signature="jg98j23890rj2390erk90fk3ew!]['##'#'[" />
    </type>
  </assembly>
</linker>

Portanto, parece que, desde que você especifique o nome do assembly e tenha uma estrutura XML válida, o arquivo vinculador não causa exceções. A documentação para o arquivo vinculador, porém, não é especialmente detalhada para um tópico tão complexo e inclui vários erros de sintaxe, ou seja:

<type fullname="Foo" preserve="fields" />
    <method name=".ctor" />
</type>

Além disso, ele não fornece uma descrição técnica do formato do arquivo vinculador, portanto, é perfeitamente possível que minha definição esteja totalmente errada.

Eu também tentei apenas pular a ligação do System.Core inteiramente com--linkskip=System.Core mas isso não tem efeito. Eu tentei essa bandeira com e sem--xml.

No projeto MvvmCross, tentei especificar uma nova classe para chamar o método Visit no mesmo estilo que o arquivo LinkerPleaseInclude.cs que é adicionado a cada projeto iOS pelo pacote MvvmCross NuGet:

[Preserve]
public class PleaseIncludeVisitor : ExpressionVisitor
{
    public PleaseIncludeVisitor()
    {
        this.Visit(null);
    }
}

Infelizmente, isso também não teve efeito.

Atualmente, estou usando o Mono 3.2.6 ((no / 9b58377) e o Xamarin.iOS v7.0.7.2.

questionAnswers(1)

yourAnswerToTheQuestion