<NetFx40_PInvokeStackResilience> 元素

指定執行階段是否會在執行階段自動修復不正確的平台叫用宣告,即使這麼做會使 Managed 和 Unmanaged 程式碼之間的轉換變慢。

<configuration>
  <runtime>
    <NetFx40_PInvokeStackResilience>

Syntax

<NetFx40_PInvokeStackResilience  enabled="1|0"/>

屬性和項目

下列章節說明屬性、子元素和父元素。

屬性

屬性 描述
enabled 必要屬性。

指定執行階段是否偵測到不正確的平台叫用宣告,並在 32 位元平臺的執行階段自動修正程式堆疊。

啟用屬性

Description
0 執行時間會使用 .NET Framework 4 中引進的更快速 Interop 封送處理架構,這不會偵測並修正不正確的平臺叫用宣告。 此為預設值。
1 執行階段會使用較慢的轉換來偵測並修正不正確的平台叫用宣告。

子元素

無。

父項目

元素 Description
configuration 通用語言執行平台和 .NET Framework 應用程式所使用之每個組態檔中的根項目。
runtime 包含有關執行階段初始化選項的資訊。

備註

此元素可讓您更快速地進行 Interop 封送處理,以針對不正確的平臺叫用宣告進行執行階段復原。

從 .NET Framework 4 開始,簡化的 Interop 封送處理架構可大幅改善從 Managed 程式碼轉換為 Unmanaged 程式碼的效能。 在舊版的 .NET Framework中,封送處理層在 32 位平臺上偵測到不正確的平臺叫用宣告,並自動修正堆疊。 新的封送處理結構會排除此步驟。 因此,轉換速度非常快,但不正確的平台叫用宣告可能會導致程式失敗。

為了方便在開發期間偵測不正確的宣告,Visual Studio 偵錯體驗已經過改善。 pInvokeStackImbalance 受控偵錯助理 (MDA) 會在應用程式以附加偵錯工具執行時通知您平台叫用宣告不正確。

若要解決應用程式使用元件無法重新編譯,且平台叫用宣告不正確的情況,您可以使用 NetFx40_PInvokeStackResilience 元素。 將這個專案新增至您的應用程式組態檔 enabled="1" ,並選擇使用舊版.NET Framework的行為加入相容性模式,代價是轉換速度較慢。 已針對舊版.NET Framework編譯的元件會自動加入此相容性模式,而且不需要這個專案。

組態檔

此元素僅可用於應用程式組態檔。

範例

下列範例示範如何針對應用程式的不正確平台叫用宣告選擇增加復原能力,代價是受控和非受控程式碼之間的轉換速度較慢。

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

另請參閱