Partager via


Incompatibilités de découpage connues

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 très complexes de la réflexion. La plupart de ces utilisations ne peuvent pas être rendues analysables à l'heure de la compilation. 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 Alternatif
Newtonsoft.Json Source générée System.Text.Json
System.Configuration.ConfigurationManager Générateur de source de liaison de configuration
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter Évitez d'utiliser 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 à l'exécution via JIT, par exemple via System.Reflection.Emit, est incompatible avec le découpage.

Chargement et exécution d'assemblages dynamiques

Le découpage et le chargement d’assembly dynamique sont un problème courant pour les systèmes qui prennent en charge des plug-ins ou des extensions, généralement par le biais d’API telles que 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 répertorient 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 : COM Wrappers

Le marshaling COM automatique est intégré à .NET depuis .NET Framework 1.0. Il utilise l’analyse du code runtime pour convertir automatiquement les objets COM natifs et les 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 des wrappers COM sont utilisés à la place, l’analyse de découpage peut garantir que tout le code utilisé sera correctement conservé.

WPF (Windows Presentation Foundation)

L’infrastructure WPF (Windows Presentation Foundation) utilise beaucoup la réflexion et certaines fonctionnalités dépendent fortement de l’inspection du code d’exécution. Il n’est pas possible pour l’analyse de découpage de conserver tout le code nécessaire pour les applications WPF. Malheureusement, presque aucune application WPF n'est exécutable après la découpe, par conséquent, la prise en charge de la découpe pour WPF est actuellement désactivée dans le SDK .NET. Voir le problème WPF n'est pas compatible avec le découpage pour suivre les progrès 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écutée sans marshaling COM intégré, de sorte que la prise en charge de la suppression des applications Windows Forms est désactivée dans le Kit de développement logiciel (SDK) .NET actuellement. Consultez la question Rendre WinForms compatible avec le découpage pour suivre la progression de l’activation du découpage pour Windows Forms.