<NetFx40_PInvokeStackResilience> 要素

ランタイムが実行時の不適切なプラットフォーム呼び出し宣言を自動的に修正するかどうかを指定します。これにより、マネージド コードとアンマネージド コード間の遷移が遅くなります。

configuration
  runtime
    NetFx40_PInvokeStackResilience>

構文

<NetFx40_PInvokeStackResilience  enabled="1|0"/>

属性および要素

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

属性

属性 説明
enabled 必須の属性です。

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

enabled 属性

[値] 説明
0 ランタイムは、.NET Framework 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>

関連項目