移轉至 .NET Framework 4.8.x 時的執行階段變更
本文列出 .NET Framework 4.8 和 4.8.1 中介紹的應用程式相容性問題。
.NET Framework 4.8
ASP.NET
ASP.NET 修正 WebForms CheckBox 控制項的 InputAttributes 和 LabelAttributes 處理方式
詳細資料
若應用程式是以 .NET Framework 4.7.2 和更早版本為目標,回傳後會遺失以程式設計方式新增至 WebForms CheckBox 控制項的 CheckBox.InputAttributes 和 CheckBox.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 包含重複實值型別時停止回應的問題
詳細資料
已修正下列問題:當 ItemsControl 的 Items
集合包含重複實值型別物件時,虛擬化可在捲動期間停止回應。
名稱 | 值 |
---|---|
範圍 | 主修 |
版本 | 4.8 |
類型 | 執行階段 |
受影響的 API
無法透過 API 分析偵測。
格線含星號資料列空間配置演算法的改進
詳細資料
已修正 Grid (於 .NET Framework 4.7 推出) 中配置大小至 的演算法錯誤 (Bug)。 在某些情況下,例如含 Height="Auto"
與空白資料列的格線,資料列會排列在錯誤的位置,可能會全部擠在格線外。
建議
若要讓應用程式受益於這些變更,您必須在 .NET Framework 4.8 或更新版本上執行應用程式。
名稱 | 值 |
---|---|
範圍 | 主修 |
版本 | 4.8 |
類型 | 執行階段 |
受影響的 API
無法透過 API 分析偵測。
含超連結 ListBox 的鍵盤瀏覽改善
詳細資料
已修正下列問題:當焦點在某個項目內的超連結,但該項目不是上層 ItemsControl 的選取項目時,按下方向鍵會顯示不正確的結果。
名稱 | 值 |
---|---|
範圍 | 主修 |
版本 | 4.8 |
類型 | 執行階段 |
受影響的 API
無法透過 API 分析偵測。
在自動化樹狀目錄中的 ItemsControls 分組效能改進
詳細資料
改善重建 ItemsControl 自動化樹狀目錄的效能,例如啟用分組的 ListBox 或 DataGrid。
名稱 | 值 |
---|---|
範圍 | 主修 |
版本 | 4.8 |
類型 | 執行階段 |
受影響的 API
無法透過 API 分析偵測。
.NET Framework 4.8.1
.NET Framework 4.8.1 中未引進任何應用程式相容性問題。
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應