Partager via


<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 aux déclarations d’appel de code non managé incorrectes pour une application, au prix de transitions plus lentes entre le code managé et le code non managé.

<configuration>
   <runtime>
      <NetFx40_PInvokeStackResilience enabled="1"/>
   </runtime>
</configuration>

Voir aussi