移轉至 .NET Framework 4.8.x 時的執行階段變更

本文列出 .NET Framework 4.84.8.1 中介紹的應用程式相容性問題。

.NET Framework 4.8

ASP.NET

ASP.NET 修正 WebForms CheckBox 控制項的 InputAttributes 和 LabelAttributes 處理方式

詳細資料

若應用程式是以 .NET Framework 4.7.2 和更早版本為目標,回傳後會遺失以程式設計方式新增至 WebForms CheckBox 控制項的 CheckBox.InputAttributesCheckBox.LabelAttributes。 若應用程式是以 .NET Framework 4.8 或更新版本為目標,則回傳後仍會保留這些項目。

建議

為了確保回傳時還原屬性的正確行為,請將 targetFrameworkVersion 設為 4.8 或更高。 例如:

<configuration>
<system.web>
<httpRuntime targetFramework="4.8"/>
</system.web>
</configuration>

將它設得更低或完全不設時,則會保留既有的不正確行為。

名稱
範圍 未知
版本 4.8
類型 執行階段

受影響的 API

ASP.NET 無法正確進行多部分處理,可能會導致遺失表單資料。

詳細資料

在目標為 .NET Framework 4.7.2 和更早版本的應用程式中,ASP.NET 可能無法正確剖析多部分界限值,而導致要求執行期間無法使用表單資料。 以 .NET Framework 4.8 或更新版本為目標的應用程式則可正確剖析多部分資料,因此在要求執行期間可使用表單值。

建議

從執行 .NET Framework 4.8 的應用程式開始,當使用 targetFrameworkVersion 項目將目標設為 .NET Framework 4.8 或更新版本時,預設行為會變更為去除分隔符號。 當以舊版 Framework 為目標,或不使用 targetFrameworkVersion 時,仍會傳回某些值的尾端分隔符號。

您也可以使用 appSetting 明確地控制此行為:

<configuration>
<appSettings>
...
<add key="aspnet:UseLegacyMultiValueHeaderHandling"  value="true"/>
...
</appSettings>
</configuration>
名稱
範圍 未知
版本 4.8
類型 執行階段

受影響的 API

使用自訂 DataAnnotations.ValidationAttribute 時 ASP.NET ValidationContext.MemberName 不是 NULL

詳細資料

在 .NET Framework 4.7.2 和更早版本中使用自訂 System.ComponentModel.DataAnnotations.ValidationAttribute 時,ValidationContext.MemberName 屬性會傳回 null。 在 2019 年 10 月更新之前的 .NET Framework 4.8 版中,其會傳回成員名稱。 從適用於 .NET Framework 4.8 的 .NET Framework 2019 年 10 月品質匯總套件預覽版開始,預設會傳回 null,但您可以選擇改為傳回成員名稱。

建議

新增下列設定至您的 web.config 檔案,以便在適用於 .NET Framework 4.8 與更新版本的 .NET Framework 2019 年 10 月品質匯總套件預覽版中,讓屬性傳回成員名稱:

<configuration>
<appSettings>
...
<add key="aspnet:GetValidationMemberName"  value="true"/>
...
</appSettings>
</configuration>

在 2019 年 10 月更新之前的 .NET Framework 4.8 版中,將此加入 web.config 檔案會還原先前的行為,而屬性會傳回 null

名稱
範圍 未知
版本 4.8
類型 執行階段

受影響的 API

核心

.NET COM 成功封送處理事件上的 ByRef SafeArray 參數

詳細資料

在 .NET Framework 4.7.2 和舊版中,COM 事件上的 ByRef SafeArray 參數無法封送處理回機器碼。 現在,透過這項變更,系統可成功封送處理 SafeArray

  • [ x ] Quirked

建議

如果正確封送處理 COM 事件上的 ByRef SafeArray 參數會導致執行中斷,您可以將下列組態參數新增至應用程式組態來停用此程式碼:

<appSettings>
  <add key="Switch.System.Runtime.InteropServices.DoNotMarshalOutByrefSafeArrayOnInvoke" value="true" />
</appSettings>
名稱
範圍 Minor
版本 4.8
類型 執行階段

受影響的 API

無法透過 API 分析偵測。

.NET Interop 現會進行 IAgileObject 的 QueryInterface 作業 (WinRT 介面)

詳細資料

從 .NET Framework 4.8 開始,當您搭配使用 WinRT 事件與 .NET 委派時,Windows 會進行 IAgileObject 的 QI 作業。 在舊版 .NET Framework 中,執行階段會讓該 QI 失敗,而無法訂閱此事件。

  • [ x ] Quirked

建議

如果啟用 IAgileObject 的 QI 作業會導致執行中斷,您可以進行下列設定來停用此程式碼。

方法 1:環境變數

設定下列環境變數:COMPLUS_DisableCCWSupportIAgileObject=1

此方法會影響繼承此環境變數的任何環境。 這可能只是單一主控台工作階段;如果您全域設定環境變數,可能會影響到整部電腦。 環境變數名稱不區分大小寫。

方法 2:登錄

使用登錄編輯器 (regedit.exe),尋找下列其中一個子機碼:

  • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft.NETFramework
  • HKEY_CURRENT_USER\SOFTWARE\Microsoft.NETFramework

然後新增下列項目:

名稱:DisableCCWSupportIAgileObject 類型:DWORD (32 位元) 值 (也稱為 REG_DWORD) 資料:1

您可以使用 Windows REG.EXE 工具,透過命令列或指令碼環境新增此值。 例如:

reg add HKLM\SOFTWARE\Microsoft.NETFramework /v DisableCCWSupportIAgileObject /t REG_DWORD /d 1

此案例會使用 HKLM,而不是 HKEY_LOCAL_MACHINE。 使用 reg add /? 來查看此語法的說明。 登錄值名稱不區分大小寫。

名稱
範圍 Edge
版本 4.8
類型 執行階段

受影響的 API

無法透過 API 分析偵測。

Windows Communication Foundation (WCF)

svcTraceViewer ComboBox 高對比變更

詳細資料

Microsoft 服務追蹤檢視器工具中,某些高對比佈景主題的 ComboBox 控制項未顯示正確色彩。 此問題已在 .NET Framework 4.7.2 中修正。 不過,由於 .NET Framework SDK 的回溯相容性需求,因此預設為客戶看不到此項修正。 .NET 4.8 將下列 AppContext 組態參數新增至 svcTraceViewer.exe.config 檔案,以呈現這項變更:

<AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false;Switch.UseLegacyAccessibilityFeatures.2=false" />

建議

如果您不希望高對比行為變更,可從 svcTraceViewer.exe.config 檔案移除下列區段,將其停用:

<AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false;Switch.UseLegacyAccessibilityFeatures.2=false" />
名稱
範圍 Edge
版本 4.8
類型 執行階段

受影響的 API

無法透過 API 分析偵測。

Windows Presentation Foundation (WPF)

KeyedCollection 的資料繫結改進

詳細資料

已修正下列問題:當來源物件宣告具有相同簽章的自訂索引子 (例如,KeyedCollection<int,TItem>) 時,Binding 會誤用 IList 索引子。

建議

若要讓以舊版為目標的應用程式受益於這項變更,您必須在 .NET Framework 4.8 或更新版本上執行該應用程式,並將下列 AppContext 參數新增至應用程式組態檔的 <runtime> 區段,並將其設為 false,以選擇採用此變更:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7"/>
</startup>
<runtime>
<!-- AppContextSwitchOverrides value attribute is in the form of key1=true/false;key2=true/false  -->
<AppContextSwitchOverrides value="Switch.System.Windows.Data.Binding.IListIndexerHidesCustomIndexer=false" />
</runtime>
</configuration>
名稱
範圍 主修
版本 4.8
類型 執行階段

受影響的 API

無法透過 API 分析偵測。

已修正當 ListBox 包含重複實值型別時停止回應的問題

詳細資料

已修正下列問題:當 ItemsControlItems 集合包含重複實值型別物件時,虛擬化可在捲動期間停止回應。

名稱
範圍 主修
版本 4.8
類型 執行階段

受影響的 API

無法透過 API 分析偵測。

格線含星號資料列空間配置演算法的改進

詳細資料

已修正 Grid (於 .NET Framework 4.7 推出) 中配置大小至 的演算法錯誤 (Bug)。 在某些情況下,例如含 Height=&quot;Auto&quot; 與空白資料列的格線,資料列會排列在錯誤的位置,可能會全部擠在格線外。

建議

若要讓應用程式受益於這些變更,您必須在 .NET Framework 4.8 或更新版本上執行應用程式。

名稱
範圍 主修
版本 4.8
類型 執行階段

受影響的 API

無法透過 API 分析偵測。

詳細資料

已修正下列問題:當焦點在某個項目內的超連結,但該項目不是上層 ItemsControl 的選取項目時,按下方向鍵會顯示不正確的結果。

名稱
範圍 主修
版本 4.8
類型 執行階段

受影響的 API

無法透過 API 分析偵測。

在自動化樹狀目錄中的 ItemsControls 分組效能改進

詳細資料

改善重建 ItemsControl 自動化樹狀目錄的效能,例如啟用分組的 ListBox 或 DataGrid。

名稱
範圍 主修
版本 4.8
類型 執行階段

受影響的 API

無法透過 API 分析偵測。

.NET Framework 4.8.1

.NET Framework 4.8.1 中未引進任何應用程式相容性問題。