<NetFx40_PInvokeStackResilience>, élément
Indique si le runtime corrige automatiquement les déclarations incorrectes d’appel de code non managé à l’exécution, au prix de transitions plus lentes entre le code managé et le code non managé.
<configuration>
<runtime>
<NetFx40_PInvokeStackResilience>
Syntaxe
<NetFx40_PInvokeStackResilience enabled="1|0"/>
Attributs et éléments
Les sections suivantes décrivent des attributs, des éléments enfants et des éléments parents.
Attributs
Attribut | Description |
---|---|
enabled |
Attribut requis. Spécifie si le runtime détecte des déclarations d’appel de code non managé incorrectes et corrige automatiquement la pile au moment de l’exécution sur les plateformes 32 bits. |
Attribut enabled
Valeur | Description |
---|---|
0 |
Le runtime utilise l’architecture de marshaling d’interopérabilité plus rapide introduite dans .NET Framework 4, qui ne détecte pas et ne corrige pas les déclarations d’appel de code non managé incorrectes. Il s’agit de la valeur par défaut. |
1 |
Le runtime utilise des transitions plus lentes qui détectent et corrigent les déclarations d’appel de code non managé incorrectes. |
Éléments enfants
Aucune.
Éléments parents
Élément | Description |
---|---|
configuration |
Élément racine de chaque fichier de configuration utilisé par le Common Language Runtime et les applications .NET Framework. |
runtime |
Contient des informations sur les options d'initialisation du runtime. |
Notes
Cet élément vous permet d’échanger un marshaling d’interopérabilité plus rapide pour la résilience au moment de l’exécution contre des déclarations d’appel de code non managé incorrectes.
À compter de .NET Framework 4, une architecture de marshaling d’interopérabilité simplifiée offre une amélioration significative des performances pour les transitions du code managé au code non managé. Dans les versions antérieures du .NET Framework, la couche de marshaling détectait les déclarations d’appel de code non managé incorrectes sur les plateformes 32 bits et corrigeait automatiquement la pile. La nouvelle architecture de marshaling supprime cette étape. Par conséquent, les transitions sont très rapides, mais une déclaration d’appel de code non managé incorrecte peut entraîner un échec du programme.
Pour faciliter la détection de déclarations incorrectes pendant le développement, l’expérience de débogage de Visual Studio a été améliorée. L’Assistant Débogage managé (MDA) pInvokeStackImbalance vous informe des déclarations d’appel de code non managé incorrectes lorsque votre application s’exécute avec le débogueur attaché.
Pour corriger les scénarios où votre application utilise des composants que vous ne pouvez pas recompiler et qui ont des déclarations d’appel de code non managé incorrectes, vous pouvez utiliser l’élément NetFx40_PInvokeStackResilience
. L’ajout de cet élément au fichier de configuration de votre application avec enabled="1"
opte pour un mode de compatibilité avec le comportement des versions antérieures du .NET Framework, au prix de transitions plus lentes. Les assemblys qui ont été compilés sur des versions antérieures du .NET Framework sont automatiquement activés avec ce mode de compatibilité et n’ont pas besoin de cet élément.
Fichier de configuration
Cet élément ne peut être utilisé que dans le fichier de configuration de l’application.
Exemple
L’exemple suivant montre comment opter pour une résilience accrue contre les déclarations d’appel de plateforme incorrectes pour une application, au coût des transitions plus lentes entre le code managé et non managé.
<configuration>
<runtime>
<NetFx40_PInvokeStackResilience enabled="1"/>
</runtime>
</configuration>