Incompatibilidades de corte conhecidas
Este artigo lista padrões que são incompatíveis com o corte com as ferramentas atuais.
Serializadores baseados em reflexão
Alternativa: serializadores sem reflexão.
Muitas utilizações da reflexão podem ser compatíveis, conforme descrito em Introdução aos avisos de corte. No entanto, os serializadores tendem a ter usos complexos de reflexão. Muitos desses usos não podem ser analisados no momento da construção. Infelizmente, a melhor opção muitas vezes é reescrever o sistema para usar a geração de código-fonte.
A tabela a seguir lista serializadores populares baseados em reflexão e suas alternativas recomendadas:
Serializadores | Alternativa |
---|---|
Newtonsoft.Json | Fonte gerada System.Text.Json |
System.Configuration.ConfigurationManager | Gerador de fonte de vinculação de configuração |
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter | Migre da serialização BinaryFormatter devido às suas falhas de segurança e confiabilidade. |
Geração de código de tempo de execução via JIT
A geração de código de tempo de execução via JIT, por exemplo, System.Reflection.Emit via é incompatível com o corte.
Carregamento e execução dinâmicos de montagem
O corte e o carregamento dinâmico de montagens são um problema comum para sistemas que suportam plugins ou extensões, geralmente por meio de APIs como LoadFrom(String). O corte depende de ver todos os assemblies no momento da compilação, para que ele saiba qual código é usado e não pode ser cortado. A maioria dos sistemas de plug-in carrega código de terceiros dinamicamente, portanto, não é possível para o trimmer identificar qual código é necessário.
Incompatibilidades da plataforma Windows
As seções a seguir listam incompatibilidades conhecidas com o corte no Windows.
NET com C++/CLI
NET com C++/CLI atualmente não oferece suporte a corte.
Agrupamento COM integrado
Alternativa: Invólucros COM
O empacotamento automático de COM foi incorporado ao .NET desde o .NET Framework 1.0. Ele usa análise de código em tempo de execução para converter automaticamente entre objetos COM nativos e objetos .NET gerenciados. Infelizmente, a análise de corte nem sempre pode prever qual código .NET precisa ser preservado para empacotamento automático de COM. No entanto, se forem usados wrappers COM, a análise de corte pode garantir que todo o código usado será preservado corretamente.
WPF
A estrutura do Windows Presentation Foundation (WPF) faz uso substancial da reflexão e alguns recursos dependem fortemente da inspeção de código em tempo de execução. Não é possível cortar a análise para preservar todo o código necessário para aplicativos WPF. Infelizmente, quase nenhum aplicativo WPF é executável após o corte, portanto, o suporte de corte para WPF está atualmente desativado no SDK do .NET. Consulte WPF não é problema compatível com corte para obter progresso na habilitação de corte para WPF.
Windows Forms
A estrutura do Windows Forms faz uso mínimo de reflexão, mas depende muito do empacotamento COM interno. Infelizmente, quase nenhum aplicativo do Windows Forms pode ser executado sem o empacotamento COM interno, portanto, o suporte de corte para aplicativos do Windows Forms está desabilitado no SDK do .NET atualmente. Consulte Tornar o problema de corte compatível com WinForms para obter progresso na habilitação do corte para Windows Forms.