次の方法で共有


<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>

関連項目