Share via


<NetFx40_PInvokeStackResilience> 要素

ランタイムが、マネージ コードとアンマネージ コードの間の切り替えを低速にしてでも、実行時に不適切なプラットフォーム呼び出し宣言を自動的に修正するかどうかを指定します。

<NetFx40_PInvokeStackResilience  enabled="1|0"/>

属性および要素

以降のセクションでは、属性、子要素、および親要素について説明します。

属性

属性

説明

enabled

必須の属性です。

ランタイムが、32 ビット プラットフォームで実行時に不適切なプラットフォーム呼び出し宣言を検出し、スタックを自動的に修正するかどうかを指定します。

enabled 属性

説明

0

ランタイムは、.NET Framework Version 4 で導入された、より高速な相互運用マーシャリング アーキテクチャを使用します。このアーキテクチャは、不適切なプラットフォーム呼び出し宣言を検出および修正しません。 これは、既定の設定です。

1

ランタイムは、不適切なプラットフォーム呼び出し宣言を検出および修正する、より低速な切り替えを使用します。

子要素

なし。

親要素

要素

説明

configuration

共通言語ランタイムおよび .NET Framework アプリケーションで使用されるすべての構成ファイルのルート要素です。

runtime

ランタイム初期化オプションに関する情報を含んでいます。

解説

この要素を使用すると、より高速な相互運用マーシャリングを、不適切なプラットフォーム呼び出し宣言に対するランタイム回復と交換できます。

.NET Framework 4 以降では、効率化された相互運用マーシャリング アーキテクチャによって、マネージ コードからアンマネージ コードへの切り替えのパフォーマンスが大幅に向上します。 旧バージョンの .NET Framework では、マーシャリング レイヤーは 32 ビット プラットフォームで不適切なプラットフォーム呼び出し宣言を検出し、スタックを自動的に修正しました。 新しいマーシャリング アーキテクチャでは、この手順が排除されます。 その結果、切り替えは非常に高速ですが、不適切なプラットフォーム呼び出し宣言によってプログラム エラーが発生することがあります。

開発中に不適切な宣言を簡単に検出するために、Visual Studio デバッグ機能が強化されました。 pInvokeStackImbalance マネージ デバッグ アシスタント (MDA) は、アプリケーションにデバッガーがアタッチされて稼働しているときに、不適切なプラットフォーム呼び出し宣言を通知します。

再コンパイルできず、不適切なプラットフォーム呼び出し宣言のあるコンポーネントをアプリケーションが使用する状況に対処するために、NetFx40_PInvokeStackResilience 要素を使用できます。 enabled="1" を指定してこの要素をアプリケーション構成ファイルに追加すると、切り替えは遅くなりますが、旧バージョンの .NET Framework の動作との互換モードを選択することができます。 旧バージョンの .NET Framework に対してコンパイルされたアセンブリでは、この互換モードが自動的に選択されるため、この要素は不要です。

構成ファイル

この要素は、アプリケーション構成ファイルでのみ使用できます。

使用例

マネージ コードとアンマネージ コードの間の切り替えは低速になりますが、アプリケーションの不適切なプラットフォーム呼び出し宣言に対する回復を強化する方法を次の例に示します。

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

参照

参照

ランタイム設定スキーマ

pInvokeStackImbalance MDA

その他の技術情報

.NET Framework の構成ファイル スキーマ