針對移轉至 .NET Framework 4.8.x 的重定位變更
本文列出 .NET Framework 4.8 和 4.8.1中導入的應用程式相容性問題。
.NET Framework 4.8
核心
受控加密類別在 FIPS 模式下不會拋出加密異常
詳細資訊
在 .NET Framework 4.7.2 和更早的版本中,當系統密碼編譯函式庫設定為 FIPS 模式時,像 SHA256Managed 這樣的受控密碼編譯提供者類別會擲回 CryptographicException。 這些例外狀況會被拋出,是因為受控版本尚未經過 FIPS(聯邦資訊處理標準)140-2 認證,以及為了封鎖那些未根據 FIPS 規則被核准的密碼編譯演算法。 由於很少有開發人員以 FIPS 模式開發機器,因此這些例外狀況通常只會在生產系統上擲回。以 .NET Framework 4.8 和更新版本為目標的應用程式會自動切換至較新的寬鬆原則,因此在這種情況下,預設不會再擲回 CryptographicException。 相反地,受控密碼編譯類別會將密碼編譯作業重新導向至系統密碼編譯連結庫。 此原則變更可有效地移除開發人員環境與生產環境之間的潛在混淆差異,並讓原生元件和受控元件在相同的密碼編譯原則下運作。
建議
如果此行為不理想,您可以選擇退出並還原到之前的行為,方法是將以下 AppContextSwitchOverrides 組態設定新增至應用程式組態檔的 <執行階段> 區段,使在 FIPS 模式中擲回 CryptographicException:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Security.Cryptography.UseLegacyFipsThrow=true" />
</runtime>
如果您的應用程式以 .NET Framework 4.7.2 或更早版本為目標,您也可以將下列 AppContextSwitchOverrides 組態設定新增至應用程式組態檔 <運行時間> 區段,以選擇加入這項變更:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Security.Cryptography.UseLegacyFipsThrow=false" />
</runtime>
名字 | 價值 |
---|---|
範圍 | 邊緣 |
版本 | 4.8 |
類型 | 重定向 |
受影響的 API
- System.Security.Cryptography.AesManaged
- System.Security.Cryptography.MD5Cng
- System.Security.Cryptography.MD5CryptoServiceProvider
- System.Security.Cryptography.RC2CryptoServiceProvider
- System.Security.Cryptography.RijndaelManaged
- System.Security.Cryptography.RIPEMD160Managed
- System.Security.Cryptography.SHA1Managed
- System.Security.Cryptography.SHA256Managed
Windows Forms
用於 .NET 4.8 的 Windows Forms 控制項之無障礙功能改善
詳情
Windows Forms 架構會持續改善它與輔助功能技術搭配運作的方式,以更好地支援 Windows Forms 客戶。 其中包括下列變更:
- 在高對比度模式下改善顯示效果的變更。
- 與朗讀程式互動的變更。
- 可存取階層中的變更(改善透過UI自動化樹狀結構的流覽)。
建議
如何選擇參與或退出這些變更 為了讓應用程式受益於這些變更,它必須在 .NET Framework 4.8 上執行。 應用程式可以透過下列其中一種方式選擇加入這些變更:
- 重新編譯目標為 .NET Framework 4.8。 這些輔助功能變更預設會在以 .NET Framework 4.8 為目標的 Windows Forms 應用程式上啟用。
- 它針對 .NET Framework 4.7.2 或更早的版本,並透過將下列 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.UseLegacyAccessibilityFeatures=false;Switch.UseLegacyAccessibilityFeatures.2=false;Switch.UseLegacyAccessibilityFeatures.3=false" />
</runtime>
</configuration>
請注意,若要啟用 .NET Framework 4.8 的輔助功能,您也必須啟用 .NET Framework 4.7.1 和 4.7.2 的輔助功能。 以 .NET Framework 4.8 為目標且想要保留舊版輔助功能行為的應用程式,可以藉由明確將此 AppContext 參數設定為 true
,選擇使用舊版輔助功能。若要啟用鍵盤工具提示調用支援,則需要將 Switch.System.Windows.Forms.UseLegacyToolTipDisplay=false
行新增至 AppContextSwitchOverrides 值:
<AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false;Switch.UseLegacyAccessibilityFeatures.2=false;Switch.UseLegacyAccessibilityFeatures.3=false;Switch.System.Windows.Forms.UseLegacyToolTipDisplay=false" />
請注意,啟用此功能需要啟用前述的 .NET Framework 4.7.1 - 4.8 的輔助功能。 此外,如果未啟用任何輔助功能,但工具提示顯示功能已啟用,則在第一次存取這些功能時會拋出執行時 NotSupportedException 錯誤。 例外狀況訊息指出鍵盤工具提示需要啟用層級 3 的輔助功能改善。
在高對比度主題中使用操作系統定義的色彩
- 改善高對比度主題。
改善朗讀程式支援
- 朗讀程式現在會在宣告 DataGridViewCell的可存取名稱時,宣告 DataGridViewColumn 的排序方向。
已改善的 CheckedListBox 輔助功能支援
- 改善 CheckedListBox 控件的敘述者支援。 使用鍵盤流覽至 CheckedListBox 控制項時,朗讀程式會將焦點放在 CheckedListBox 項目並播報它。
- 當控制項成為焦點時,空的 CheckedListBox 控制項現在會為虛擬的第一個項目繪製焦點矩形。
改進的 ComboBox 輔助功能支援
啟用 ComboBox 控件的UI自動化支援,能夠使用使用者介面自動化通知和其他UI自動化功能。 強化 DataGridView 的輔助功能支援
啟用 DataGridView 控件的UI自動化支援,能夠使用UI自動化通知和其他UI自動化功能。
對應於 DataGridViewComboBoxEditingControl 或 DataGridViewTextBoxEditingControl 的 UI Automation 元素現在是對應編輯儲存格的子系。
改善的LinkLabel輔助功能支援
改善的 ProgressBar 輔助功能支援
- 啟用了 ProgressBar 控制項的 UI 自動化支援,能夠使用使用者介面自動化通知和其他 UI 自動化功能。 開發人員現在可以使用朗讀程式可宣佈的UI自動化通知來指出進度。 如需UI自動化事件概觀的概觀,包括UI自動化通知事件,請參閱 UI自動化事件概觀。
改善 PropertyGrid 的無障礙功能支援
- 啟用了 PropertyGrid 控件的 UI 自動化支援,能夠使用使用者介面自動化通知和其他 UI 自動化功能。
- 對應於當前正在編輯屬性的 UI Automation 元素現在是對應的屬性專案 UI Automation 元素的子系。
- 如果父系 PropertyGrid 控件設定為類別檢視,則 UI Automation 屬性項目元素現在是對應類別元素的子系。
改善的ToolStrip支援
更佳的視覺線索
- 當控件收到焦點時,空的 CheckedListBox 控件現在會顯示焦點指標。 注意:在執行階段中,控件已啟用 UI 自動化支援,但在設計階段中不會使用。 如需 UI 自動化的概觀,請參閱 UI 自動化概觀。
使用鍵盤叫用控件的工具提示
- 控件工具提示現在可以透過鍵盤聚焦至控件來叫用。 這個功能必須明確地在應用程式中啟用(請參閱第 節「如何選擇加入或退出這些更改」)
名字 | 價值 |
---|---|
範圍 | 主要 |
版本 | 4.8 |
類型 | 再行銷 |
Windows Presentation Foundation (WPF)
WPF 中的無障礙功能改進
詳情
高對比度增強
- 現在 Expander 控件的焦點已可見。 在舊版的 .NET Framework 中,它不是。
- 選取 CheckBox 和 RadioButton 控件中的文字現在比舊版 .NET Framework 更容易看到。
- 停用 ComboBox 的邊框色現在與停用的文字顏色相同。 在舊版的 .NET Framework 中,它不是。
- 停用和焦點按鈕現在會使用正確的主題顏色。 在舊版 .NET Framework 中,它們沒有提供這些功能。
- 當 ComboBox 控件的樣式設定為 ToolBar.ComboBoxStyleKey時,現在會顯示下拉式按鈕。 在舊版的 .NET Framework 中,它不是。
- DataGrid 控件中的排序指標箭號現在會使用主題色彩。 在舊版 .NET Framework 中,它沒有。
- 默認超連結樣式現在會變更為滑鼠上方的正確主題色彩。 在舊版 .NET Framework 中,並非如此。
- 現在可以看到單選按鈕上的鍵盤焦點。 在舊版的 .NET Framework 中,它不是。
- DataGrid 控制的複選框欄現在會使用預期的色彩來顯示鍵盤焦點的回饋。 過去版本的 .NET Framework 並不具備該功能。
- 鍵盤焦點視覺效果現在會顯示在 ComboBox 和 ListBox 控件上。 在舊版的 .NET Framework 中,它不是。
螢幕助讀程式互動改善
- Expander 控件現在已由螢幕助讀程序正確宣告為群組(展開/折疊)。
- DataGridCell 控件現在已由螢幕助讀程式正確宣告為當地語系化的數據格。
- 螢幕助讀程式現在會告知可編輯 ComboBox的名稱。
- PasswordBox 控制項不再被螢幕助讀程式宣告為「檢視中沒有項目」。
LiveRegion 支援
螢幕助讀程式,例如朗讀程式,通常藉由描述目前具有焦點的UI元素,協助人們瞭解應用程式的使用者介面(UI)。 不過,如果UI元素在畫面中的某處變更,而且沒有焦點,則使用者可能不會收到通知並遺漏重要資訊。 LiveRegions 旨在解決此問題。 開發人員可以使用它們來通知螢幕助讀程式或任何其他 使用者介面自動化 用戶端已對 UI 元素進行重要變更。 螢幕助讀程式接著可以決定如何及何時通知使用者這項變更。 LiveSetting 屬性也可讓螢幕助讀程式知道通知使用者對UI所做的變更有多重要。
建議
如何選擇加入或退出這些變更
為了讓應用程式受益於這些變更,它必須在 .NET Framework 4.7.1 或更新版本上執行。 應用程式可以透過下列任一種方式受益於這些變更:
目標 .NET Framework 4.7.1。 這是建議的方法。 這些輔助功能變更預設會在以 .NET Framework 4.7.1 或更新版本為目標的 WPF 應用程式上啟用。
它會在應用程式設定檔的
<runtime>
區段中新增下列 AppContext Switch,並將其設定為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.UseLegacyAccessibilityFeatures=false" /> </runtime> </configuration>
以 .NET Framework 4.7.1 或更新版本為目標且想要保留舊版輔助功能行為的應用程式,可以藉由明確將此 AppContext 參數設定為 true
,選擇使用舊版輔助功能功能。
如需 UI 自動化的概觀,請參閱 UI 自動化概觀。
名字 | 價值 |
---|---|
範圍 | 主要 |
版本 | 4.7.1 |
類型 | 重定向廣告 |
受影響的 API
- AutomationElementIdentifiers.LiveSettingProperty
- AutomationElementIdentifiers.LiveRegionChangedEvent
- System.Windows.Automation.AutomationLiveSetting
- AutomationProperties.LiveSettingProperty
- AutomationProperties.SetLiveSetting(DependencyObject, AutomationLiveSetting)
- AutomationProperties.GetLiveSetting(DependencyObject)
- AutomationPeer.GetLiveSettingCore()
將 SelectionTextBrush 公用屬性新增至 TextBox/PasswordBox 非裝飾專案
詳細資料
在使用 非基於裝飾器的文字選擇TextBox 和 PasswordBox的 WPF 應用程式中,開發人員現在可以設定新加入的 SelectionTextBrush 屬性,以改變所選文字的顯示。 根據預設,此色彩會隨著 HighlightTextBrushKey而變更。 如果未啟用非裝飾項型文字選取,則此屬性不會執行任何動作。
建議
啟用非裝飾項型文字選取之後,您可以使用 PasswordBox.SelectionTextBrush 和 SelectionTextBrush 屬性來變更選取文字的外觀。 這可以使用 XAML 來達成:
<TextBox SelectionBrush="Red" SelectionTextBrush="White" SelectionOpacity="0.5"
Foreground="Blue" CaretBrush="Blue">
This is some text.
</TextBox>
名字 | 價值 |
---|---|
範圍 | 主要 |
版本 | 4.8 |
類型 | 重行銷 |
受影響的 API
- TextBoxBase.SelectionTextBrushProperty
- TextBoxBase.SelectionTextBrush
- System.Windows.Controls.TextBox
- System.Windows.Controls.PasswordBox
HwndHost 現在能夠在 DPI 變更期間正確地調整子 HWND 的大小。
詳情
在 .NET Framework 4.7.2 和更早的版本中,當 WPF 在 Per-Monitor 感知模式下執行時,隨著 DPI 的變更,例如將應用程式從一個顯示器移動到另一個顯示器時,裝載於 HwndHost 中的控制項未能正確調整大小。 此修正可確保承載的控制項調整到適當的大小。
建議
為了讓應用程式受益於這些變更,它必須在 .NET Framework 4.7.2 或更新版本上執行,而且它必須藉由在應用程式組態檔的 <runtime>
區段中設定下列 AppContext Switchfalse
來選擇加入此行為,如下列範例所示。
<?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.DoNotUsePresentationDpiCapabilityTier2OrGreater=false" />
</runtime>
</configuration>
名字 | 價值 |
---|---|
範圍 | 主要 |
版本 | 4.8 |
類型 | 重新定位廣告 |
Windows Workflow Foundation (WF)
Windows Workflow Foundation(WF)工作流程設計工具中的無障礙功能改善
詳細資訊
Windows Workflow Foundation (WF) 工作流程設計工具正在改善其與輔助功能技術搭配運作的方式。 這些改進包括下列變更:
- 在某些控制項中,定位順序改為從左到右、從上到下:
- 初始化相互關聯視窗,用於設定 InitializeCorrelation 活動的相互關聯數據
- Receive、Send、SendReply和 ReceiveReply 活動的內容定義視窗
- 更多功能可透過鍵盤取得:
- 編輯活動的屬性時,屬性群組可以在第一次將焦點放在鍵盤上時折疊。
- 現在可透過鍵盤存取警告圖示。
- [屬性] 視窗中的 [更多屬性] 按鈕現在可透過鍵盤存取。
- 鍵盤用戶現在可以存取工作流程設計工具之 [參數] 和 [變數] 窗格中的標題項目。
- 改善具有焦點的項目可見度,例如:
- 將資料列新增至工作流程設計工具和活動設計工具所使用的資料表格。
- 在 ReceiveReply 和 SendReply 活動中逐頁流覽欄位。
- 設定變數或自變數的預設值
- 螢幕助讀程式現在可以正確辨識:
- 工作流程設計工具中設定的斷點。
- FlowSwitch<T>、FlowDecision和 CorrelationScope 活動。
- Receive 活動的內容。
- InvokeMethod 活動的目標類型。
- 例外狀況下拉式方塊和 TryCatch 活動中的 Finally 區段。
- [訊息類型] 下拉選單、[新增相互關聯初始化表達式] 視窗中的分隔器、[內容定義] 視窗,以及訊息活動中的 [相互關聯定義] 視窗(Receive、Send、SendReply和 ReceiveReply)。
- 狀態機器轉換和轉換目的地。
- FlowDecision 活動上的批注和連接器。
- 活動的內容 (按滑鼠右鍵) 選單。
- 屬性值編輯器、清除搜尋按鈕、依類別目錄和字母順序排序按鈕,以及屬性方格中的 [表達式編輯器] 對話方塊。
- 工作流程設計工具中的縮放百分比。
- 活動 Parallel 和 Pick 中的分隔符。
- InvokeDelegate 活動。
- 字典活動的 [選取類型] 視窗(
Microsoft.Activities.AddToDictionary<TKey,TValue>
、Microsoft.Activities.RemoveFromDictionary<TKey,TValue>
等)。 - [瀏覽並選取 .NET 類型] 視窗。
- 工作流程設計工具中的階層連結。
- 選擇高對比度主題的使用者會看到工作流程設計工具及其控件的可見度許多改善,例如元素之間的較佳對比比例,以及用於焦點元素的更明顯選取方塊。
建議
如果您有具有重新裝載工作流程設計工具的應用程式,您的應用程式可以藉由執行下列其中一項動作來受益於這些變更:
- 重新編譯您的應用程式以 .NET Framework 4.7.1 為目標。 預設會啟用這些可及性變更。
- 如果您的應用程式以 .NET Framework 4.7 或更早版本為目標,但在 .NET Framework 4.7.1 上執行,您可以將下列 AppContext 參數新增至 app.config 檔案的
<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.UseLegacyAccessibilityFeatures=false" />
</runtime>
</configuration>
以 .NET Framework 4.7.1 或更新版本為目標且想要保留舊版輔助功能行為的應用程式,可以藉由明確將此 AppContext 切換開關設定為 true
,選擇使用舊版輔助功能。
名字 | 價值 |
---|---|
範圍 | 次要 |
版本 | 4.7.1 |
類型 | 重定目標 |
符號的工作流程 XAML 總和檢查碼從 SHA1 變更為 SHA256
詳情
為了支援使用 Visual Studio 進行偵錯,工作流程執行階段會使用哈希演算法為工作流程 XAML 檔案產生校驗和。 在 .NET Framework 4.6.2 和舊版中,工作流程總和檢查碼哈希使用 MD5 演算法,這會導致啟用 FIPS 的系統發生問題。 從 .NET Framework 4.7 開始,預設演算法已變更為SHA1。 從 .NET Framework 4.8 開始,預設演算法已變更為SHA256。
建議
如果您的程式代碼因總和檢查碼失敗而無法載入工作流程實例或尋找適當的符號,請嘗試將 AppContext
參數 “Switch.System.Activities.UseSHA1HashForDebuggerSymbols” 設定為 true
。 在程式代碼中:
System.AppContext.SetSwitch("Switch.System.Activities.UseSHA1HashForDebuggerSymbols", true);
或在設定中:
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.Activities.UseSHA1HashForDebuggerSymbols=true" />
</runtime>
</configuration>
名字 | 價值 |
---|---|
範圍 | 次要 |
版本 | 4.8 |
類型 | 再定位 |
工作流程 XOML 定義和 SqlTrackingService 快取密鑰從 MD5 變更為 SHA256
細節
中的工作流程運行時間會保留 XOML 中定義的工作流程定義快取。 SqlTrackingService 也會保留以字串為鍵的快取。 這些快取是以包含校驗碼哈希值的數值作為索引鍵。 在 .NET Framework 4.7.2 和舊版中,此總和檢查碼哈希使用 MD5 演算法,這會導致啟用 FIPS 的系統發生問題。 從 .NET Framework 4.8 開始,使用的演算法是 SHA256。此變更不應該發生相容性問題,因為每次啟動工作流程運行時間和 SqlTrackingService 時,都會重新計算值。 不過,我們提供了選項以允許客戶在必要時恢復使用舊有的哈希演算法。
建議
如果此變更在執行工作流程時發生問題,請嘗試設置一或兩個 AppContext
開關:
- “Switch.System.Workflow.Runtime.UseLegacyHashForWorkflowDefinitionDispenserCacheKey” 設定為 true。
- 「Switch.System.Workflow.Runtime.UseLegacyHashForSqlTrackingCacheKey」為 true。 在程式代碼中:
System.AppContext.SetSwitch("Switch.System.Workflow.Runtime.UseLegacyHashForWorkflowDefinitionDispenserCacheKey", true);
System.AppContext.SetSwitch("Switch.System.Workflow.Runtime.UseLegacyHashForSqlTrackingCacheKey", true);
或在組態檔中 (這必須在正在建立 WorkflowRuntime 對象的應用程式的組態檔中):
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.Workflow.Runtime.UseLegacyHashForWorkflowDefinitionDispenserCacheKey=true" />
<AppContextSwitchOverrides value="Switch.System.Workflow.Runtime.UseLegacyHashForSqlTrackingCacheKeytrue" />
</runtime>
</configuration>
名字 | 價值 |
---|---|
範圍 | 次要 |
版本 | 4.8 |
類型 | 再定位廣告 |
工作流程 XOML 檔案校驗碼從 MD5 變更為 SHA256
詳情
若要支援使用 Visual Studio 對以 XOML 為基礎的工作流程進行偵錯,當包含 XOML 檔案的工作流程專案建置時,XOML 檔案內容的總和檢查碼會包含在產生為 WorkflowMarkupSourceAttribute.MD5Digest 值的程式代碼中。 在 .NET Framework 4.7.2 和舊版中,此總和檢查碼哈希使用 MD5 演算法,這會導致啟用 FIPS 的系統發生問題。 從 .NET Framework 4.8 開始,使用的演算法是 SHA256。 若要與 WorkflowMarkupSourceAttribute.MD5Digest 相容,只會使用產生的總和檢查碼的前 16 個字節。這可能會在偵錯期間造成問題。 您可能需要重新建置專案。
建議
如果重新建置您的項目無法解決問題,請嘗試將 AppContext
參數 「Switch.System.Workflow.ComponentModel.UseLegacyHashForXomlFileChecksum」 設定為 true。在程式代碼中:
System.AppContext.SetSwitch("Switch.System.Workflow.ComponentModel.UseLegacyHashForXomlFileChecksum", true);
或者,在組態檔中(這必須位於您所使用的 MSBuild.exe.config 的 MSBuild.exe 中):
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.Workflow.ComponentModel.UseLegacyHashForXomlFileChecksum=true" />
</runtime>
</configuration>
名字 | 價值 |
---|---|
範圍 | 次要 |
版本 | 4.8 |
類型 | 重定向廣告 |
.NET Framework 4.8.1
.NET Framework 4.8.1 中未引進任何應用程式相容性問題。