Incompatibilités connues du découpage des espaces

Cet article répertorie les modèles incompatibles avec le découpage avec les outils actuels.

Sérialiseurs basés sur la réflexion

Alternative : sérialiseurs sans réflexion.

De nombreuses utilisations de la réflexion peuvent être rendues compatibles avec le découpage, comme décrit dans Introduction aux avertissements de découpage. Toutefois, les sérialiseurs ont tendance à avoir des utilisations complexes de la réflexion. La plupart de ces utilisations ne peuvent pas être analysables au moment de la génération. Malheureusement, la meilleure option consiste souvent à réécrire le système pour utiliser la génération source.

Le tableau suivant répertorie les sérialiseurs populaires basés sur la réflexion et leurs alternatives recommandées :

Sérialiseurs Alternative
Newtonsoft.Json Code généré System.Text.Json
System.Configuration.ConfigurationManager Générateur de source de liaison de configuration
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter Migrer hors de la sérialisation BinaryFormatter en raison de ses failles de sécurité et de fiabilité.

Génération de code runtime via JIT

La génération de code runtime via JIT, par exemple, via System.Reflection.Emit est incompatible avec le découpage.

Chargement et exécution d’assemblys dynamiques

Le découpage et le chargement dynamique des assemblys sont un problème courant pour les systèmes qui prennent en charge les plug-ins ou les extensions, généralement via des API comme LoadFrom(String). Le découpage repose sur la vue de tous les assemblys au moment de la génération. Il sait donc quel code est utilisé et ne peut pas être découpé. La plupart des systèmes de plug-in chargent du code tiers de manière dynamique. Il n’est donc pas possible pour le découpage d’identifier le code nécessaire.

Incompatibilités de plateforme Windows

Les sections suivantes listent les incompatibilités connues avec le découpage sur Windows.

Programmation NET avec C++/CLI

La programmation NET avec C++/CLI ne prend actuellement pas en charge le découpage.

Marshaling COM intégré

Alternative : Wrappers COM

Le marshaling COM automatique est intégré à .NET depuis .NET Framework 1.0. Il utilise l’analyse du code d’exécution pour effectuer une conversion automatique entre des objets COM natifs et des objets .NET managés. Malheureusement, l’analyse de découpage ne peut pas toujours prédire quel code .NET doit être conservé pour le marshaling COM automatique. Toutefois, si les wrappers COM sont utilisés à la place, l’analyse du découpage peut garantir que tout le code utilisé sera correctement conservé.

WPF

L’infrastructure Windows Presentation Foundation (WPF) utilise de manière substantielle la réflexion et certaines fonctionnalités dépendent fortement de l’inspection du code à l’exécution. Il n’est pas possible pour l’analyse du découpage de conserver tout le code nécessaire pour les applications WPF. Malheureusement, presque aucune application WPF n’est exécutable après le découpage. Par conséquent, la prise en charge du découpage pour WPF est actuellement désactivée dans le kit de développement logiciel (SDK) .NET. Consultez WPF n’est pas compatible avec le découpage problème de progression lors de l’activation du découpage pour WPF.

Windows Forms

L’infrastructure Windows Forms utilise au minimum la réflexion, mais dépend fortement du marshaling COM intégré. Malheureusement, presque aucune application Windows Forms n’est exécutable sans marshaling COM intégré. Par conséquent, la prise en charge du découpage des applications Windows Forms est actuellement désactivée dans le Kit de développement logiciel (SDK) .NET. Consultez Rendre WinForms compatible avec le découpage problème de progression lors de l’activation du découpage pour Windows Forms.