Condividi tramite


Incompatibilità di taglio note

Questo articolo elenca i modelli incompatibili con il taglio con gli strumenti correnti.

Serializzatori basati su riflessione

Alternativa: serializzatori senza riflessione.

Molti usi della reflection possono essere resi compatibili con il trimming, come descritto in Introduzione agli avvisi di trimming. Tuttavia, i serializzatori tendono ad avere usi complessi della riflessione. Molti di questi usi non possono essere resi analizzabili in fase di compilazione. Sfortunatamente, l'opzione migliore è spesso riscrivere il sistema per usare la generazione di origine.

Nella tabella seguente sono elencati i serializzatori basati su reflection più diffusi e le relative alternative consigliate:

Serializzatori Alternativa
Newtonsoft.Json Origine generata System.Text.Json
System.Configuration.ConfigurationManager Generatore di sorgenti per l'associazione della configurazione
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter Eseguire la migrazione dalla serializzazione BinaryFormatter a causa dei relativi difetti di sicurezza e affidabilità.

Generazione di codice di runtime tramite JIT

La generazione di codice di runtime, ad esempio tramite JIT e System.Reflection.Emit, non è compatibile con la riduzione.

Caricamento ed esecuzione di assembly dinamici

Il taglio e il caricamento di assembly dinamici è un problema comune per i sistemi che supportano plug-in o estensioni, in genere tramite API come LoadFrom(String). Trimming si basa sulla visualizzazione di tutti gli assembly in fase di compilazione, in modo da sapere quale codice viene usato e non può essere eliminato. La maggior parte dei sistemi plug-in carica il codice di terze parti in modo dinamico, quindi non è possibile che il trimmer identifichi il codice necessario.

Incompatibilità della piattaforma Windows

Le sezioni seguenti elencano le incompatibilità note con il trimming su Windows.

Programmazione NET con C++/CLI

La programmazione .NET con C++/CLI attualmente non supporta l'ottimizzazione.

Marshalling COM predefinito

Alternativa: Wrapper COM

Il marshalling COM automatico è stato integrato in .NET da .NET Framework 1.0. Usa l'analisi del codice di runtime per convertire automaticamente tra oggetti COM nativi e oggetti .NET gestiti. Sfortunatamente, l'analisi di riduzione non è sempre in grado di prevedere quale codice .NET debba essere mantenuto per il marshalling COM automatico. Tuttavia, se vengono usati COM Wrappers, l'analisi di trimming può garantire che tutto il codice utilizzato venga mantenuto correttamente.

WPF (Windows Presentation Foundation)

Il framework Windows Presentation Foundation (WPF) usa notevolmente la reflection e alcune funzionalità sono fortemente dipendenti dall'ispezione del codice di runtime. Non è possibile eseguire l'analisi di taglio per mantenere tutto il codice necessario per le applicazioni WPF. Sfortunatamente, quasi nessuna app WPF è eseguibile dopo il trimming, quindi il supporto al trimming per WPF è attualmente disabilitato nel .NET SDK. Consulta il problema WPF non è compatibile con il trimming per i progressi nell'abilitazione del trimming per WPF.

Windows Form

Il framework Windows Forms usa al minimo la riflessione, ma dipende in gran rilievo dal marshalling COM predefinito. Sfortunatamente, quasi nessuna applicazione Windows Forms è eseguibile senza il marshalling COM predefinito, quindi il supporto di ottimizzazione per le applicazioni Windows Forms è attualmente disabilitato nel .NET SDK. Per informazioni sui progressi per abilitare il taglio in Windows Forms, vedere il problema Rendere WinForms compatibile con il taglio.