將移轉至 .NET Framework 4.8.x 的重定目標變更

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

.NET Framework 4.8

核心

受控加密類別在 FIPS 模式中不會擲回 CryptographyException

詳細資料

在舊版 .NET Framework 4.7.2 及更早版本中,受控加密提供者類別 (例如 SHA256Managed) 會在系統密碼編譯程式庫以 FIPS 模式設定時擲回 CryptographicException。 因為受控版本未經過 FIPS (聯邦資訊處理標準) 140-2 認證,並封鎖可能不受 FIPS 規則核准的加密演算法,因此會擲回這些例外狀況。 因為只有極少數開發人員以 FIP 模式使用開發電腦,因此這些例外狀況通常僅在生產系統上擲回。以 .NET Framework 4.8 及更新版本為目標的應用程式,會自動切換至較新且寬鬆的原則,以便不再於此情況下根據預設擲回 CryptographicException。 相反地,這些受控加密類別會將加密作業重新導向到系統加密程式庫。 此原則變更有效地去除了開發人員環境與生產環境之間的潛在混淆,而且讓原生元件與受控元件在相同的密碼編譯原則下執行。

建議

如果不需要此行為,您可以選擇退出並還原先前行為,以便透過將下列 AppContextSwitchOverrides 組態設定新增至應用程式組態檔的 <runtime> 區段,在 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>
名稱
範圍 Edge
版本 4.8
類型 正在重定目標

受影響的 API

Windows Forms

已改進 .NET 4.8 之 Windows Forms 控制項的協助工具

詳細資料

Windows Forms Framework 利用協助工具技術,持續改善運作方式,可為 Windows Forms 客戶提供更良好的支援。 這些包括下列變更:

  • 改善高對比模式期間之顯示方式的變更。
  • 對朗讀程式的互動進行了變更。
  • 對可存取階層進行了變更 (改善 UI 自動化樹狀的瀏覽)。

建議

如何選擇使用或不使用這些變更為了讓應用程式能受益於這些變更,應用程式必須在 .NET Framework 4.8 上執行。 應用程式可以用下列任一種方式選擇使用這些變更:

  • 將其重新編譯為以 .NET Framework 4.8 為目標。 在以 .NET Framework 4.8 為目標的 Windows Forms 應用程式上,預設會啟用這些協助工具的變更。
  • 其以 .NET Framework 4.7.2 或更早版本為目標,且藉由在應用程式組態檔的 <runtime> 區段中新增下列 AppContext 參數,並設定為 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 的協助工具改善。

使用高對比佈景主題中作業系統定義的色彩

  • 改善的高對比佈景主題。

改善的朗讀程式支援

改善的 CheckedListBox 協助工具支援

  • 已改善 CheckedListBox 控制項的朗讀程式支援。 使用鍵盤瀏覽至 CheckedListBox 控制項時,朗讀程式會專注於 CheckedListBox 項目並宣布該項目。
  • 當控制項變成焦點時,空白 CheckedListBox 控制項現在具有為虛擬第一個項目繪製的焦點矩形。

改善的 ComboBox 協助工具支援

改善的 LinkLabel 協助工具支援

  • 改善 LinkLabel 控制項協助工具:如果對應的 LinkLabel 控制項已停用,朗讀程式會宣布連結的已停用狀態。

改善的進度列協助工具支援

  • 已啟用 ProgressBar 控制項的 UI 自動化支援,並可使用 UI 自動化通知和其他 UI 自動化功能。 開發人員現在可以使用 UI 自動化通知,朗讀程式可以透過這些通知顯示進度。 如需 UI 自動化事件概觀 (包括 UI 自動化通知事件),請參閱 UI 自動化事件概觀

改善的 PropertyGrid 協助工具支援

  • 已啟用 PropertyGrid 控制項的 UI 自動化支援,並可使用 UI 自動化通知和其他 UI 自動化功能。
  • 與當前已編輯屬性對應的 UI 自動化項目,現為對應屬性項目 UI 自動化項目的子項目。
  • 如果父 PropertyGrid 控制項設為類別檢視,則 UI 自動化屬性項目項目現為對應類別項目的子項目。

改善的 ToolStrip 支援

  • 已啟用 ToolStrip 控制項的 UI 自動化支援,並可使用 UI 自動化通知和其他 UI 自動化功能。
  • 已改善 ToolStrip 項目的瀏覽。
  • 在項目模式中,朗讀程式的焦點未消失,且不會前往隱藏的項目。

已改進視覺提示

  • 空白 CheckedListBox 控制項現會在收到焦點時顯示焦點指標。 注意:UI 自動化支援會在執行階段為控制項啟用,但不會在設計階段使用。 如需 UI 自動化的概觀,請參閱 UI 自動化概觀

使用鍵盤叫用控制項的工具提示

  • 現在可以把焦點放在使用鍵盤控制,叫用控制項工具提示。 這項功能必須針對應用程式明確啟用 (請參閱「如何選擇使用或不使用這些變更」章節)
名稱
範圍 主修
版本 4.8
類型 正在重定目標

Windows Presentation Foundation (WPF)

WPF 的協助工具改善

詳細資料

高對比改善

  • 現在會顯示 Expander 控制項的焦點。 在舊版 .NET Framework 中並非如此。
  • CheckBoxRadioButton 控制項在選取時,其中的文字現在比起舊版 .NET Framework 更容易查看。
  • 已停用 ComboBox 的框線現在與已停用文字的色彩相同。 在舊版 .NET Framework 中並非如此。
  • 已停用和聚焦按鈕現在會使用正確的佈景主題色彩。 在舊版 .NET Framework 中並非如此。
  • ComboBox 控制項的樣式設定為 ToolBar.ComboBoxStyleKey 時,現在會顯示下拉式按鈕。 在舊版 .NET Framework 中並非如此。
  • DataGrid 控制項中的排序指標箭號現在會使用佈景主題色彩。 在舊版 .NET Framework 中並非如此。
  • 預設的超連結樣式現在會在滑鼠移至上方時變更為正確的佈景主題色彩。 在舊版 .NET Framework 中並非如此。
  • 現在會顯示選項按鈕上的鍵盤焦點。 在舊版 .NET Framework 中並非如此。
  • DataGrid 控制項的核取方塊資料行現在會使用鍵盤焦點回饋的預期色彩。 在舊版 .NET Framework 中並非如此。
  • 鍵盤焦點視覺效果現在會顯示在 ComboBoxListBox 控制項上。 在舊版 .NET Framework 中並非如此。

螢幕助讀程式互動改善

  • 螢幕助讀程式現在會將 Expander 控制項正確宣告為群組 (展開/摺疊)。
  • 螢幕助讀程式現在會將 DataGridCell 控制項正確宣告為資料儲存格 (展開/摺疊)。
  • 螢幕助讀程式現在會宣告可編輯 ComboBox 的名稱。
  • PasswordBox 控制項不再由螢幕助讀程式宣告為「檢視中無任何項目」。

LiveRegion 支援

螢幕助讀程式 (例如朗讀程式) 可協助人們了解應用程式的使用者介面 (UI),通常藉由描述目前具有焦點的 UI 元素。 不過,如果螢幕某處的 UI 項目變更,而且沒有焦點,則使用者可能不會收到通知,並且可能會遺失重要資訊。 LiveRegions 旨在用來解決這個問題。 開發人員可以使用它們來通知螢幕助讀程式或任何其他 UI 自動化用戶端,已對 UI 項目進行重要變更。 螢幕助讀程式接著可以決定如何和何時通知使用者已進行這項變更。 LiveSetting 屬性還可讓螢幕助讀程式知道通知使用者 UI 所做變更的重要性。

建議

如何選擇加入或退出這些變更

若要讓應用程式受益於這些變更,您必須在 .NET Framework 4.7.1 或更新版本上執行應用程式。 應用程式可以用下列任一種方式受益於這些變更:

  • 目標 .NET Framework 4.7.1。 這是建議的處理方式。 在以 .NET Framework 4.7.1 或更新版本為目標的 WPF 應用程式上,預設會啟用這些協助工具變更。

  • 藉由在 app config 檔案的 <runtime> 區段中新增下列 AppContext 參數,並將它設定為 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

將 SelectionTextBrush 公用屬性新增至 TextBox/PasswordBox 非提示選取項目

詳細資料

在針對 TextBoxPasswordBox 使用非提示型文字選取項目的 WPF 應用程式中,開發人員現在可以設定新增的 SelectionTextBrush 屬性,以變更所選文字的轉譯。 根據預設,此色彩會隨著 HighlightTextBrushKey 而變更。 如果未啟用非提示型文字選取範圍,則會忽略這個屬性。

建議

啟用非提示型文字選取範圍後,您可以使用 PasswordBox.SelectionTextBrushSelectionTextBrush 屬性變更所選文字的外觀。 此操作可以使用 XAML 完成:

<TextBox SelectionBrush="Red" SelectionTextBrush="White"  SelectionOpacity="0.5"
Foreground="Blue" CaretBrush="Blue">
This is some text.
</TextBox>
名稱
範圍 主修
版本 4.8
類型 正在重定目標

受影響的 API

HwndHost 現在會在 DPI 變更期間正確調整子 HWND 的大小

詳細資料

在 .NET Framework 4.7.2 和更早版本中,當 WPF 在個別監視器感知模式中執行時,裝載於 HwndHost 內的控制項未在 DPI 變更後正確調整大小,例如將應用程式從某個監視器移至另一個監視器時。 此修正可確保裝載的控制項適當調整大小。

建議

為了讓應用程式受益於這些變更,應用程式必須於 .NET Framework 4.7.2 或更新版本執行,並且必須藉由將應用程式組態檔中 <runtime> 區段的 AppContext 參數設為 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 &#39;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 活動之關聯性資料的初始化關聯性視窗
  • ReceiveSendSendReplyReceiveReply 活動的內容定義視窗
  • 可透過鍵盤使用多個功能:
  • 編輯活動的屬性時,如果第一次將焦點放在屬性群組,可以透過鍵盤將其摺疊。
  • 現在可透過鍵盤存取警告圖示。
  • 現在可透過鍵盤存取 [屬性] 視窗中的 [其他屬性] 按鈕。
  • 鍵盤使用者現在可以存取工作流程設計工具之 [引數] 和 [變數] 窗格中的標頭項目。
  • 在以下這類情況發生時,已改善具有焦點之項目的可見性:
  • 在工作流程設計工具與活動設計工具所使用的資料格中新增資料列。
  • 使用 Tab 鍵循環顯示 ReceiveReplySendReply 活動的欄位。
  • 設定變數或引數的預設值
  • 螢幕助讀程式現在可以正確辨識:
  • 工作流程設計工具中設定的中斷點。
  • FlowSwitch<T>FlowDecisionCorrelationScope 活動。
  • Receive 活動的內容。
  • InvokeMethod 活動的目標類型。
  • TryCatch 活動中的例外狀況下拉式方塊和 Finally 區段。
  • 傳訊活動 (ReceiveSendSendReplyReceiveReply) 中的 [訊息類型] 下拉式方塊、[新增關聯性初始設定式] 視窗、[內容定義] 視窗和 [CorrelatesOn 定義] 視窗。
  • 狀態機器轉換和轉換目的地。
  • FlowDecision 活動的註釋和連接器。
  • 活動的操作 (右鍵) 功能表。
  • 屬性方格中的屬性值編輯器、[清除搜尋] 按鈕、[依分類] 及 [字母順序] 排序按鈕和 [運算式編輯器] 對話方塊。
  • 工作流程設計工具中的顯示比例百分比。
  • ParallelPick 活動中的分隔符號。
  • 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 上執行,您可以在 app.config 檔案的 <runtime> 區段中新增下列 AppContext 參數,並將它設定為 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,選擇加入舊版的協助工具功能。

名稱
範圍 Minor
版本 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>
名稱
範圍 Minor
版本 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>
名稱
範圍 Minor
版本 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 的 MSBuild.exe.config 中):

<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.Workflow.ComponentModel.UseLegacyHashForXomlFileChecksum=true" />
</runtime>
</configuration>
名稱
範圍 Minor
版本 4.8
類型 正在重定目標

.NET Framework 4.8.1

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