規定執行時是否會自動修正錯誤的平台呼叫宣告,代價是管理與非管理程式碼之間的轉換變慢。
<configuration>
<runtime>
<NetFx40_PInvokeStackResilience>
語法
<NetFx40_PInvokeStackResilience enabled="1|0"/>
屬性和項目
下列章節說明屬性、子元素和父元素。
屬性
| 屬性 | 描述 |
|---|---|
enabled |
必要屬性。 指定執行時是否偵測錯誤的平台呼叫宣告,並在 32 位元平台上自動修正堆疊。 |
啟用屬性
| 值 | 描述 |
|---|---|
0 |
運行時間會使用 .NET Framework 4 中引進的更快的 Interop 封送處理架構,這不會偵測並修正不正確的平台調用宣告。 這是預設值。 |
1 |
運行時間會使用較慢的轉換來偵測並修正不正確的平台調用宣告。 |
子元素
無。
父項目
| 元素 | 描述 |
|---|---|
configuration |
通用語言執行平台和 .NET Framework 應用程式所使用之每個組態檔中的根項目。 |
runtime |
包含有關執行階段初始化選項的資訊。 |
備註
這個元素讓你能以更快的互操作編組換取執行時韌性,以抵禦錯誤的平台宣告。
從 .NET Framework 4 開始,簡化的 Interop 封送處理架構提供從 Managed 程式代碼轉換到 Unmanaged 程式代碼的重大效能改善。 在舊版 .NET Framework 中,封送處理層偵測到 32 位平臺上不正確的平台調用宣告,並自動修正堆棧。 新的封送處理架構會排除此步驟。 因此,轉換速度非常快,但不正確的平台調用宣告可能會導致程序失敗。
為了方便在開發期間偵測不正確的宣告,Visual Studio 偵錯體驗已改善。 pInvokeStackImbalance Managed 偵錯助理 (MDA) 會在應用程式以附加調試程式執行時通知您平台調用宣告不正確。
若要解決應用程式使用元件無法重新編譯,且平台調用宣告不正確的情況,您可以使用 NetFx40_PInvokeStackResilience 元素。 將這個專案新增至您的應用程式組態檔,並 enabled="1" 選擇使用舊版 .NET Framework 的行為加入相容性模式,代價是轉換速度較慢。 已針對舊版 .NET Framework 編譯的元件會自動加入此相容性模式,而且不需要此元素。
組態檔
這個元素只能在應用程式組態檔中使用。
範例
下列範例示範如何選擇針對應用程式不正確的平台調用宣告增加復原能力,代價是 Managed 和 Unmanaged 程式代碼之間的轉換速度較慢。
<configuration>
<runtime>
<NetFx40_PInvokeStackResilience enabled="1"/>
</runtime>
</configuration>