Partilhar via


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.