Incompatibilità di taglio note
Questo articolo elenca i modelli incompatibili con il taglio con gli strumenti correnti.
Serializzatori basati sulla reflection
Alternativa: serializzatori senza reflection.
Molti usi della reflection possono essere resi compatibili con il taglio, come descritto in Introduzione agli avvisi di taglio. Tuttavia, i serializzatori tendono ad avere usi complessi della reflection. 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 dell’origine.
Nella tabella seguente sono elencati i serializzatori basati sulla reflection più diffusi e le relative alternative consigliate:
Serializzatori | Alternativa |
---|---|
Newtonsoft.Json | Origine generata System.Text.Json |
System.Configuration.ConfigurationManager | Generatore di origini con associazione della configurazione |
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter | Eseguire la migrazione dalla serializzazione BinaryFormatter a causa dei difetti di sicurezza e affidabilità. |
Generazione di codice di runtime tramite JIT
La generazione di codice di runtime tramite JIT, ad esempio, tramite System.Reflection.Emit non è compatibile con il taglio.
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). Il trimming si basa sulla visualizzazione di tutti gli assembly in fase di compilazione, perciò è possibile 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 taglio in Windows.
Programmazione .NET con C++/CLI
La programmazione .NET con C++/CLI attualmente non supporta il taglio.
Marshalling COM predefinito
Alternativa: Wrapper COM
Il marshalling COM automatico è stato integrato in .NET da .NET Framework 1.0. Usa l'analisi del codice in fase di esecuzione per eseguire automaticamente la conversione tra oggetti COM nativi e oggetti .NET gestiti. Sfortunatamente, l'analisi del taglio non è sempre in grado di prevedere quale codice .NET deve essere mantenuto per il marshalling COM automatico. Tuttavia, se vengono usati wrapper COM, l'analisi del taglio può garantire che tutto il codice usato venga mantenuto correttamente.
WPF
Il framework Windows Presentation Foundation (WPF) fa un uso sostanziale delle reflection e alcune funzionalità dipendono fortemente dall'ispezione del codice in fase di esecuzione. Non è possibile eseguire l'analisi del taglio per mantenere tutto il codice necessario per le applicazioni WPF. Sfortunatamente, quasi nessuna app WPF è eseguibile dopo il taglio, quindi il supporto del taglio per WPF è attualmente disabilitato nell’SDK .NET. Per conoscere i progressi nell’abilitazione del taglio per WPF, vedi il problema WPF non è compatibile con il taglio.
WinForms
Il framework Windows Forms fa un uso minimo della reflection, ma dipende principalmente dal marshalling COM predefinito. Sfortunatamente, quasi nessuna app Windows Forms è eseguibile senza marshalling COM predefinito, quindi il supporto del taglio per le app Windows Forms è attualmente disabilitato nell’SDK .NET. Per conoscere i progressi nell'abilitazione del taglio per Windows Forms, vedi il problema Rendere compatibile il trim WinForms.