將目標重新設置以便遷移到 .NET Framework 4.7.x
本文列出 .NET Framework 4.7、4.7.1和 4.7.2中導入的應用程式兼容性問題。
.NET Framework 4.7
ASP.NET
HttpRuntime.AppDomainAppPath 擲回 NullReferenceException
詳細資訊
在 .NET Framework 4.6.2 中,當擷取包含 null 字元的 P:System.Web.HttpRuntime.AppDomainAppPath
值時,運行時間會擲回 T:System.NullReferenceException
。在 .NET Framework 4.6.1 和舊版中,運行時間會擲回 T:System.ArgumentNullException
。
建議
您可以執行下列任一動作來回應這項變更:
- 如果您的應用程式在 .NET Framework 4.6.2 上運行,請處理
T:System.NullReferenceException
。 - 升級至 .NET Framework 4.7,它會還原先前的行為,並引發
T:System.ArgumentNullException
。
名字 | 價值 |
---|---|
範圍 | 邊緣 |
版本 | 4.6.2 |
類型 | 再定位 |
受影響的 API
對每個工作階段的並行要求進行節流
詳情
在 .NET Framework 4.6.2 和更早版本中,ASP.NET 依序執行具有相同 Sessionid 的要求,ASP.NET 一律會透過 Cookie 發出 Sessionid。 如果頁面需要很長時間才能回應,只需在瀏覽器中按下 F5,就可能大幅降低伺服器效能。 在修正中,我們新增了計數器來追蹤已排入佇列的要求,並在要求超過指定限制時終止要求。 預設值為 50。 如果達到限制,則會在事件記錄檔中記錄警告,而且 IIS 記錄檔中可能會記錄 HTTP 500 回應。
建議
若要還原舊的行為,您可以將下列設定新增至您的 web.config 檔案,以退出退出新的行為。
<appSettings>
<add key="aspnet:RequestQueueLimitPerSession" value="2147483647"/>
</appSettings>
名字 | 價值 |
---|---|
範圍 | Edge 瀏覽器 |
版本 | 4.7 |
類型 | 再定位 |
聯網
ServicePointManager.SecurityProtocol 的預設值為 SecurityProtocolType.System.Default
詳細資訊
從以 .NET Framework 4.7 為目標的應用程式開始,ServicePointManager.SecurityProtocol 屬性的預設值為 SecurityProtocolType.SystemDefault。 這項變更可讓以 SslStream 為基礎的 .NET Framework 網路 API(例如 FTP、HTTPS 和 SMTP)繼承操作系統的預設安全性通訊協定,而不是使用 .NET Framework 所定義的硬式編碼值。 預設值會因操作系統和系統管理員所執行的任何自定義設定而有所不同。 如需每個 Windows 作業系統版本中預設 SChannel 通訊協定的資訊,請參閱 TLS/SSL 中的 通訊協定。
對於以舊版 .NET Framework 為目標的應用程式,ServicePointManager.SecurityProtocol 屬性的預設值取決於以 .NET Framework 為目標的版本。 如需更多資訊,請參閱遷移從 .NET Framework 4.5.2 到 4.6 的重新定位變更中的建議
這項變更會影響以 .NET Framework 4.7 或更新版本為目標的應用程式。 如果您想要使用已定義的通訊協定,而不是依賴系統預設值,您可以明確設定 ServicePointManager.SecurityProtocol 屬性的值。 如果這項變更不符合需求,您可以在應用程式設定檔中的 <運行時間> 區段新增一個設定項目來選擇退出這項變更。 下列範例顯示 <runtime>
部分和 Switch.System.Net.DontEnableSystemDefaultTlsVersions
選擇退出開關:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Net.DontEnableSystemDefaultTlsVersions=true" />
</runtime>
名字 | 價值 |
---|---|
範圍 | 次要 |
版本 | 4.7 |
類型 | 重定向廣告 |
受影響的 API
SslStream 支援 TLS 警示
詳細資訊
在 TLS 交握失敗之後,首次進行 I/O 讀取/寫入操作時會拋出包含內部 System.ComponentModel.Win32Exception 例外的 System.IO.IOException。
System.ComponentModel.Win32Exception 的 System.ComponentModel.Win32Exception.NativeErrorCode 程式代碼可以使用 TLS 和 SSL 警示的 通道錯誤碼,從遠端合作物件對應至 TLS 警示,。如需詳細資訊,請參閱 RFC 2246:第 7.2.2 節錯誤警示。
.NET Framework 4.6.2 和更早版本中的行為是,當另一方無法完成握手且隨後立即拒接連線時,該傳輸通道(通常是 TCP 連線)會在寫入或讀取期間逾時。
建議
呼叫網路 I/O API 的應用程式,例如 Read(Byte[], Int32, Int32)/Write(Byte[], Int32, Int32) 應該處理 IOException 或 System.TimeoutException。
從 .NET Framework 4.7 開始,預設會啟用 TLS 警示功能。 以 .NET Framework 4.0 到 4.6.2 版本為目標的應用程式,在 .NET Framework 4.7 或更新版本系統上執行,將會停用此功能以保留相容性。
下列組態 API 可用於啟用或停用在 .NET Framework 4.7 或更新版本上執行的 .NET Framework 4.6 和更新版本應用程式的功能。
以程式設計方式:必須是應用程式執行的第一件事,因為 ServicePointManager 只會初始化一次:
AppContext.SetSwitch("TestSwitch.LocalAppContext.DisableCaching", true); // Set to 'false' to enable the feature in .NET Framework 4.6 - 4.6.2. AppContext.SetSwitch("Switch.System.Net.DontEnableTlsAlerts", true);
AppConfig:
<runtime> <AppContextSwitchOverrides value="Switch.System.Net.DontEnableTlsAlerts=true"/> <!-- Set to 'false' to enable the feature in .NET Framework 4.6 - 4.6.2. --> </runtime>
登錄機碼 (計算機全域):將 [值] 設定為 [
false
],以啟用 .NET Framework 4.6 - 4.6.2 中的功能。Key: HKLM\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\AppContext\Switch.System.Net.DontEnableTlsAlerts - Type: String - Value: "true"
名字 | 價值 |
---|---|
範圍 | 邊緣 |
版本 | 4.7 |
類型 | 重新定位 |
受影響的 API
- System.Net.Security.SslStream
- System.Net.WebRequest
- System.Net.HttpWebRequest
- System.Net.FtpWebRequest
- System.Net.Mail.SmtpClient
- System.Net.Http
安全
CspParameters.ParentWindowHandle 現在需要 HWND 值
詳細資訊
.NET Framework 2.0 中引進的 ParentWindowHandle 值可讓應用程式註冊父視窗句柄值,讓存取密鑰所需的任何 UI(例如 PIN 提示或同意對話框)會開啟為指定視窗的強制回應子系。從以 .NET Framework 4.7 為目標的應用程式開始,Windows Forms 應用程式可以使用如下所示的程式代碼來設定 ParentWindowHandle 屬性:
cspParameters.ParentWindowHandle = form.Handle;
在舊版 .NET Framework 中,此值必須是 System.IntPtr,代表 HWND 值所在的記憶體位置。 將屬性設定為表單的句柄在 Windows 7 及更早版本中沒有作用,但在 Windows 8 及更高版本中,會導致「System.Security.Cryptography.CryptographicException:參數不正確」。
建議
針對 .NET Framework 4.7 或更新版本的應用程式,若希望註冊父視窗關係,建議使用簡化的格式:
cspParameters.ParentWindowHandle = form.Handle;
已識別出傳遞的正確值為保有數值 form.Handle
的記憶體位置位址的使用者,可以透過將 AppContext 開關 Switch.System.Security.Cryptography.DoNotAddrOfCspParentWindowHandle
設定為 true
,選擇不參與行為變更:
- 藉由以程式設計方式在 AppContext 上設定相容性切換參數,如這裡 所述。。
- 將下列這一行新增至 app.config 檔案的
<runtime>
區段:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Security.Cryptography.DoNotAddrOfCspParentWindowHandle=true"/>
</runtime>
相反地,當應用程式在舊版 .NET Framework 版本下載入時,想要啟用 .NET Framework 4.7 執行階段新行為的使用者可以將 AppContext 參數設定為 false
。
名字 | 價值 |
---|---|
範圍 | 次要 |
版本 | 4.7 |
類型 | 重新定位 |
受影響的 API
SslStream 支援 TLS 警示
詳情
在 TLS 握手失敗後,第一次 I/O 讀取/寫入操作將會拋出一個包含內部 System.ComponentModel.Win32Exception 例外的 System.IO.IOException。
System.ComponentModel.Win32Exception 的 System.ComponentModel.Win32Exception.NativeErrorCode 程式代碼可以使用 Schannel 錯誤碼來對應為來自遠端合作方的 TLS 警示和 SSL 警示。 如需詳細資訊,請參閱 RFC 2246:第 7.2.2 節的錯誤警示。
.NET Framework 4.6.2 和更早版本中的行為是,如果另一方無法進行交握而立即拒絕連線,則在寫入或讀取過程中,傳輸通道(通常是 TCP 連線)會逾時。
建議
呼叫網路 I/O API 的應用程式,例如 Read(Byte[], Int32, Int32)/Write(Byte[], Int32, Int32) 應該處理 IOException 或 System.TimeoutException。
從 .NET Framework 4.7 開始,預設會啟用 TLS 警示功能。 以 .NET Framework 4.0 到 4.6.2 版本為目標的應用程式,在 .NET Framework 4.7 或更新版本系統上執行,將會停用此功能以保留相容性。
下列組態 API 可用於啟用或停用在 .NET Framework 4.7 或更新版本上執行的 .NET Framework 4.6 和更新版本應用程式的功能。
以程式設計方式:必須是應用程式執行的第一件事,因為 ServicePointManager 只會初始化一次:
AppContext.SetSwitch("TestSwitch.LocalAppContext.DisableCaching", true); // Set to 'false' to enable the feature in .NET Framework 4.6 - 4.6.2. AppContext.SetSwitch("Switch.System.Net.DontEnableTlsAlerts", true);
AppConfig:
<runtime> <AppContextSwitchOverrides value="Switch.System.Net.DontEnableTlsAlerts=true"/> <!-- Set to 'false' to enable the feature in .NET Framework 4.6 - 4.6.2. --> </runtime>
登錄機碼 (計算機全域):將 [值] 設定為 [
false
],以啟用 .NET Framework 4.6 - 4.6.2 中的功能。Key: HKLM\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\AppContext\Switch.System.Net.DontEnableTlsAlerts - Type: String - Value: "true"
名字 | 價值 |
---|---|
範圍 | 邊緣 |
版本 | 4.7 |
類型 | 廣告再行銷 |
受影響的 API
- System.Net.Security.SslStream
- System.Net.WebRequest
- System.Net.HttpWebRequest
- System.Net.FtpWebRequest
- System.Net.Mail.SmtpClient
- System.Net.Http
Windows Communication Foundation (WCF)
使用 DataContractJsonSerializer 串行化控制字元現在與 ECMAScript V6 和 V8 相容
詳情
在 .NET Framework 4.6.2 和舊版中,System.Runtime.Serialization.Json.DataContractJsonSerializer 不會以與 ECMAScript V6 和 V8 標準兼容的方式串行化某些特殊控制字元,例如 \b、\f 和 \t。 從 .NET Framework 4.7 開始,這些控制字元的串行化與 ECMAScript V6 和 V8 相容。
建議
針對以 .NET Framework 4.7 為目標的應用程式,預設會啟用此功能。 如果此行為不符合需求,您可以將下列這一行添加到 app.config 或 web.config 檔案的 <runtime>
區段,以停用此功能:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Runtime.Serialization.DoNotUseECMAScriptV6EscapeControlCharacter=false" />
</runtime>
名字 | 價值 |
---|---|
範圍 | 邊緣 |
版本 | 4.7 |
類型 | 重新定位 |
受影響的 API
- DataContractJsonSerializer.WriteObject(Stream, Object)
- DataContractJsonSerializer.WriteObject(XmlDictionaryWriter, Object)
- DataContractJsonSerializer.WriteObject(XmlWriter, Object)
WCF 訊息安全性現在可以使用 TLS1.1 和 TLS1.2
詳細資訊
從 .NET Framework 4.7 開始,除了SSL3.0和 TLS1.0,客戶還可以透過應用程式組態設定,在WCF 訊息安全性中設定 TLS1.1 或 TLS1.2。
建議
在 .NET Framework 4.7 中,預設會停用 WCF 訊息安全性中的 TLS1.1 和 TLS1.2 支援。 您可以將下列這一行新增至 app.config 或 web.config 檔案的 [<runtime>
] 區段來加以啟用:
<runtime>
<AppContextSwitchOverrides value="Switch.System.ServiceModel.DisableUsingServicePointManagerSecurityProtocols=false;Switch.System.Net.DontEnableSchUseStrongCrypto=false" />
</runtime>
名字 | 價值 |
---|---|
範圍 | 邊緣 |
版本 | 4.7 |
類型 | 重新定位目標 |
Windows Presentation Foundation (WPF)
在支援觸控的系統上呼叫 System.Windows.Input.PenContext.Disable 可能會引發 ArgumentException
詳情
在某些情況下,於啟用觸控功能的系統上,呼叫內部 System.Windows.Input.PenContext.Disable 方法,可能會因重入性而擲回未處理的 T:System.ArgumentException
。
建議
此問題已在 .NET Framework 4.7 中解決。 若要防止例外狀況,請升級至 .NET Framework 4.7 或以上的版本。
名字 | 價值 |
---|---|
範圍 | 邊緣 |
版本 | 4.6.1 |
類型 | 再定位 |
ImageSourceConverter.ConvertFrom 的例外處理代碼中的 NullReferenceException
詳情
ConvertFrom(ITypeDescriptorContext, CultureInfo, Object) 例外狀況處理程序代碼中的錯誤導致擲回不正確的 System.NullReferenceException,而不是預期的例外狀況(System.IO.DirectoryNotFoundException 或 System.IO.FileNotFoundException)。 這項變更會更正該錯誤,讓方法現在擲回正確的例外狀況。
根據預設,以 .NET Framework 4.6.2 和更早版本為目標的所有應用程式都會繼續擲回 System.NullReferenceException 以取得相容性。 以 .NET Framework 4.7 和更新版本為目標的開發人員應該會看到正確的例外狀況。
建議
想要在以 .NET Framework 4.7 或更新版本為目標時還原為取得 System.NullReferenceException 的開發人員,可以將下列內容新增/合併至其應用程式的 App.config 檔案:
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Media.ImageSourceConverter.OverrideExceptionWithNullReferenceException=true"/>
</runtime>
</configuration>
名字 | 價值 |
---|---|
範圍 | 邊緣 |
版本 | 4.7 |
類型 | 重定向 |
受影響的 API
WPF 方格中的空間分配給星形欄
詳情
從 .NET Framework 4.7 開始,WPF 會取代 Grid 用來配置空間給 *-columns 的演算法。 這會在數種情況下變更指派給 *-columns 的實際寬度:
- 當一個或多個 *-columns 也具有最小或最大寬度時,將覆寫該列的比例配置。 (最小寬度可以衍生自明確的 MinWidth 宣告,或衍生自從欄內容取得的隱含最小值。最大寬度只能從 MaxWidth 宣告明確定義。)
- 當一或多個 *-columns 宣告極大型 *-weight 時,大於 10^298。
- 當 *-weights 有顯著差異,足以引發浮點不穩定(溢位、下溢、精度損失)時。
- 當啟用版面配置四捨五入時,且有效的顯示 DPI 已足夠高。 在前兩種情況下,新演算法所產生的寬度可能會與舊演算法所產生的寬度明顯不同:在最後一個案例中,差異最多會是一或兩個圖元。
新的演算法修正了舊演算法中存在的數個錯誤:
列的總配置可能會超過網格的寬度。 將空間配置給比例共用小於其大小下限的數據行時,可能會發生這種情況。 演算法會配置大小下限,這會減少其他數據行可用的空間。 如果沒有要配置的 *-columns,則總配置將會太大。
總配置可能會低於網格線的寬度。 這是#1的對應問題,當分配到的列比例份額超過其最大大小,且沒有 留 下任何 *-列來分擔負荷時,就會產生這樣的問題。
兩個 *-欄能夠獲得與其 *-權重不成比例的配置。 這是較溫和的 #1/#2 版本,當配置至 *-columns A、B 和 C (依該順序)時,其中 B 的比例分配違反其最小值(或最大值)限制所產生。 如上所述,這會改變欄 C 可用的空間,其獲得的比例分配比欄 A 較少(或更多)。
極大的權重(> 10^298)的列都視為具有權重10^298。 不尊重它們之間的比例差異(和略小權數的數據行之間)。
未正確處理具有無限權重的欄位。 (實際上,你不能將重量設定為無限大,但這是人為的限制。配置程式代碼嘗試處理它,但執行錯誤的工作。
在避免溢位、下溢、精確度遺失和類似浮點問題的同時,需要處理幾個次要問題。
佈局四捨五入的調整在高 DPI 設定時不正確。 新的演算法會產生符合下列準則的結果:
- 指派給 *-column 的實際寬度絕不小於其最小寬度,也不會大於其最大寬度。
- 未分配到最小或最大寬度的每個 *-column 都會被分配與其 *-weight 成正比的寬度。 具體地說,如果兩個數據行分別以寬度 x* 和 y* 宣告,而且如果兩個數據行都未收到其最小或最大寬度,則指派給數據行的實際寬度 v 和 w 的比例相同:v / w == x / y。
- 配置給「proportional(比例)」*-欄的總寬度等於在分配給限制性欄(固定、自動和已分配其最小或最大寬度的*-欄)後的剩餘空間。 例如,如果最小寬度的總和超過方格的可用寬度,這可以是零。
- 所有這些語句都會針對「理想版面」進行解釋。 當版面配置四捨五入生效時,實際寬度可能會與理想的寬度相差一個像素。
注意
本文中有關欄和寬度的所有內容也同樣適用於列和高度。
建議
根據預設,以 .NET Framework 4.7 開頭之 .NET Framework 版本為目標的應用程式將會看到新的演算法,而以 .NET Framework 4.6.2 或舊版為目標的應用程式將會看到舊的演算法。
若要覆寫預設值,請使用下列組態設定:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Controls.Grid.StarDefinitionsCanExceedAvailableSpace=true" />
</runtime>
true
值會選取舊的演算法,false
選取新的演算法。
名字 | 價值 |
---|---|
範圍 | 次要 |
版本 | 4.7 |
類型 | 再定位 |
WPF Pointer-Based Touch Stack
詳細資訊
這項變更新增了啟用基於 WM_POINTER 的選擇性 WPF 觸控/手寫筆棧的功能。 未明確啟用此動作的開發人員應該不會在 WPF 觸控/手寫筆行為中看到任何變更。選用 WM_POINTER 觸控/手寫筆堆疊的目前已知問題:
- 不支援即時手寫筆跡。
- 雖然數位墨水書寫和 StylusPlugins 仍可運作,但它們會在 UI 執行緒上處理,這可能會導致效能不佳。
- 行為變更,因為從觸控/手寫筆事件升級至滑鼠事件
- 操作行為可能會有所不同
- 拖放操作不會顯示適當的觸控輸入回饋
- 這不會影響手寫筆輸入
- 在觸控/手寫筆事件上無法再起始拖放功能
- 這可能會導致應用程式停止回應,直到偵測到滑鼠輸入為止。
- 相反地,開發人員應該從滑鼠事件中啟動拖放。
建議
想要啟用此堆疊的開發人員可以將下列內容新增/合併至其應用程式的 App.config 檔案:
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Input.Stylus.EnablePointerSupport=true"/>
</runtime>
</configuration>
拿掉此項目或將值設定為 false 將會關閉此選擇性堆疊。請注意,此堆疊僅適用於 Windows 10 Creators Update 和更新版本。
名字 | 價值 |
---|---|
範圍 | 邊緣 |
版本 | 4.7 |
類型 | 重定向廣告 |
Windows Workflow Foundation (WF)
工作流程校驗碼從 MD5 變更為 SHA1
詳情
為了支援使用 Visual Studio 進行除錯,工作流程執行階段會使用哈希演算法為工作流程實例產生總和檢查碼。 在 .NET Framework 4.6.2 和舊版中,工作流程總和檢查碼哈希使用 MD5 演算法,這會導致啟用 FIPS 的系統發生問題。 從 .NET Framework 4.7 開始,演算法是SHA1。 如果您的程式代碼保存了這些檢查碼,它們將會不相容。
建議
如果您的程式代碼因總和檢查碼失敗而無法載入工作流程實例,請嘗試將 AppContext
參數 “Switch.System.Activities.UseMD5ForWFDebugger” 設定為 true。在程式代碼中:
System.AppContext.SetSwitch("Switch.System.Activities.UseMD5ForWFDebugger", true);
或在配置中:
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.Activities.UseMD5ForWFDebugger=true" />
</runtime>
</configuration>
名字 | 價值 |
---|---|
範圍 | 輕微 |
版本 | 4.7 |
類型 | 重新定位 |
.NET Framework 4.7.1
ASP.NET
ASP.NET 在 .NET Framework 4.7.1 中的無障礙功能改善
詳細資料
從 .NET Framework 4.7.1 開始,ASP.NET 已改善 ASP.NET Web 控件在 Visual Studio 中使用輔助功能技術的方式,以更好地支援 ASP.NET 客戶。 其中包括下列變更:
- 在控件中進行實作遺漏 UI 可及性模式的變更,例如 [詳細數據檢視精靈] 中的 [新增欄位] 對話框,或 ListView 精靈的 [配置 ListView] 對話框。
- 調整以改善高對比模式的顯示,例如數據分頁欄位編輯器。
- 改善控件鍵盤導航體驗的變更,例如 DataPager 控件的 [編輯分頁欄位精靈] 中的 [欄位] 對話框、[設定 ObjectContext 對話框],或 [配置資料來源精靈] 的 [配置資料選擇] 對話框。
建議
如何選擇加入或退出這些變更 為了讓Visual Studio Designer受益於這些變更,它必須在 .NET Framework 4.7.1 或更新版本上執行。 Web 應用程式可以透過下列任一方式受益於這些變更:
- 安裝 Visual Studio 2017 15.3 或更新版本,其默認支援下列 AppContext Switch 的新輔助功能功能。
- 以下範例顯示,若要選擇不使用舊版輔助功能行為,可將
Switch.UseLegacyAccessibilityFeatures
AppContext switch 新增至 devenv.exe.config 檔案中的<runtime>
區段,並將其設定為false
。
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<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 |
類型 | 重定向廣告 |
核心
SerialPort 背景線程例外狀況
詳細資訊
當擲回OS例外狀況時,以 SerialPort 數據流建立的背景線程不會再終止進程。
在以 .NET Framework 4.7 和更早版本為目標的應用程式中,當以 SerialPort 流建立的背景執行緒擲回操作系統例外狀況時,程序就會終止。
在以 .NET Framework 4.7.1 或更新版本為目標的應用程式中,背景線程會等候與使用中序列埠相關的OS事件,在某些情況下可能會當機,例如突然移除序列埠。
建議
若為以 .NET Framework 4.7.1 為目標的應用程式,您可以將下列內容新增至 app.config
檔案的 [<runtime>
] 區段,選擇不使用例外狀況處理機制:
<runtime>
<AppContextSwitchOverrides value="Switch.System.IO.Ports.DoNotCatchSerialStreamThreadExceptions=true" />
</runtime>
針對以舊版 .NET Framework 為目標但在 .NET Framework 4.7.1 或更新版本上執行的應用程式,您可以將下列內容新增至 app.config
檔案的 <runtime>
區段來啟用例外狀況處理:
<runtime>
<AppContextSwitchOverrides value="Switch.System.IO.Ports.DoNotCatchSerialStreamThreadExceptions=false" />
</runtime>
名字 | 價值 |
---|---|
範圍 | 次要 |
版本 | 4.7.1 |
類型 | 重新定位 |
受影響的 API
ServiceBase 不會傳播 OnStart 例外狀況
詳細資訊
在 .NET Framework 4.7 和舊版中,服務啟動時擲回的例外狀況不會傳播至 ServiceBase.Run的呼叫端。
從以 .NET Framework 4.7.1 為目標的應用程式開始,執行階段將例外狀況傳播至無法啟動服務的 ServiceBase.Run。
建議
在服務啟動時,如果有例外狀況,則會傳播該例外狀況。 這應該有助於診斷服務無法啟動的情況。
如果此行為不理想,您可以將下列 AppContextSwitchOverrides
元素新增至應用程式組態檔的 runtime
區段,以停用此行為:
<AppContextSwitchOverrides value="Switch.System.ServiceProcess.DontThrowExceptionsOnStart=true" />
如果您的應用程式以 4.7.1 之前的版本為目標,但您想要有此行為,請將下列 AppContextSwitchOverrides
元素新增至應用程式組態檔的 runtime
區段:
<AppContextSwitchOverrides value="Switch.System.ServiceProcess.DontThrowExceptionsOnStart=false" />
名字 | 價值 |
---|---|
範圍 | 次要 |
版本 | 4.7.1 |
類型 | 再行銷 |
受影響的 API
安全
預設 SignedXML 和 SignedXMS 演算法已變更為 SHA256
詳細資訊
在 .NET Framework 4.7 和更早版本中,某些作業的 SignedXML 和 SignedCMS 預設為 SHA1。從 .NET Framework 4.7.1 開始,預設會針對這些作業啟用 SHA256。 這項變更是必要的,因為不再將SHA1視為安全。
建議
有兩個新的內容切換值,可控制預設是否使用SHA1(不安全)或SHA256:
- Switch.System.Security.Cryptography.Xml.UseInsecureHashAlgorithms
- Switch.System.Security.Cryptography.Pkcs.UseInsecureHashAlgorithms 針對以 .NET Framework 4.7.1 和更新版本為目標的應用程式,如果不需要使用 SHA256,您可以將下列組態參數新增至應用程式組態檔的 運行時間 區段,以還原 SHA1 的預設值:
<AppContextSwitchOverrides value="Switch.System.Security.Cryptography.Xml.UseInsecureHashAlgorithms=true;Switch.System.Security.Cryptography.Pkcs.UseInsecureHashAlgorithms=true" />
針對以 .NET Framework 4.7 和舊版為目標的應用程式,您可以將下列組態參數新增至應用程式組態檔的 runtime 區段,以選擇加入這項變更:
<AppContextSwitchOverrides value="Switch.System.Security.Cryptography.Xml.UseInsecureHashAlgorithms=false;Switch.System.Security.Cryptography.Pkcs.UseInsecureHashAlgorithms=false" />
名字 | 價值 |
---|---|
範圍 | 次要 |
版本 | 4.7.1 |
類型 | 再行銷 |
受影響的 API
- System.Security.Cryptography.Pkcs.CmsSigner
- System.Security.Cryptography.Xml.SignedXml
- System.Security.Cryptography.Xml.Reference
SignedXml.GetPublicKey 會在 net462 上傳回 RSACng(或 lightup),而不需重新設定目標變更
詳細資料
從 .NET Framework 4.6.2 開始,SignedXml.GetPublicKey 方法返回的物件具體類型無需特別處理已從 CryptoServiceProvider 的實現更改為 Cng 的實現。 這是因為實作已從使用 certificate.PublicKey.Key
變為使用內部 certificate.GetAnyPublicKey
,其將轉送至 RSACertificateExtensions.GetRSAPublicKey。
建議
從 .NET Framework 4.7.1 上執行的應用程式開始,您可以使用 .NET Framework 4.6.1 和舊版中預設使用的 CryptoServiceProvider 實作,方法是將下列組態參數新增至應用程式組態檔的 運行時間 區段:
<AppContextSwitchOverrides value="Switch.System.Security.Cryptography.Xml.SignedXmlUseLegacyCertificatePrivateKey=true" />
名字 | 價值 |
---|---|
範圍 | 邊緣 |
版本 | 4.6.2 |
類型 | 重新定位 |
受影響的 API
Windows Communication Foundation (WCF)
改善某些 .NET SDK 工具的可用性
詳情
在 .NET Framework SDK 4.7.1 中,SvcConfigEditor.exe 和 SvcTraceViewer.exe 工具已藉由修正各種輔助功能問題而改善。 其中大部分是小問題,例如名稱未定義,或某些用戶界面自動化模式實作不正確。 雖然許多使用者不會注意到這些不正確的值,但使用螢幕助讀程式等輔助技術的客戶會發現這些 SDK 工具更容易存取。 當然,這些修正會變更一些先前的行為,例如鍵盤焦點順序。若要取得這些工具中的所有輔助功能修正,您可以對 app.config 檔案執行下列作業:
<runtime>
<AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false"/>
</runtime>
名字 | 價值 |
---|---|
範圍 | 邊緣 |
版本 | 4.7.1 |
類型 | 重定向 |
Windows Forms
Windows Forms 控制項的輔助功能改進
詳情
Windows Forms 正在改善它與輔助功能技術搭配運作的方式,以更好地支援 Windows Forms 客戶。 其中包括從 .NET Framework 4.7.1 開始的下列變更:
- 在高對比模式下改善顯示效果的變更。
- 為改善屬性瀏覽器體驗所做的變更。 屬性瀏覽器的改進包括:
- 透過各種下拉式選擇視窗提高鍵盤操作的流暢度。
- 減少不必要的制表位。
- 更完善的控制項類型報告。
- 改善敘述者行為。
- 實施變更以補足控件中缺失的 UI 無障礙模式。
建議
如何選擇加入或退出這些變更 為了讓應用程式受益於這些變更,它必須在 .NET Framework 4.7.1 或更高版本上執行。 應用程式可以透過下列任一種方式受益於這些變更:
- 該程式已重新編譯,目標為 .NET Framework 4.7.1。 這些輔助功能變更預設會在以 .NET Framework 4.7.1 或更新版本為目標的 Windows Forms 應用程式上啟用。
- 它透過將以下 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
",選擇使用舊版輔助功能。
如需 UI 自動化的概觀,請參閱 UI 自動化概觀。
新增對UI自動化模式和屬性的支援
輔助技術用戶可以透過使用常見且公開描述的調用模式,來發揮新的 WinForms 輔助功能。 這些模式不是 WinForms 特有的。 例如,輔助功能用戶端可以在 IAccessible 介面 (MAAS) 上呼叫 QueryInterface 方法,以取得 IServiceProvider 介面。 如果這個介面可供使用,用戶端可以使用其 QueryService 方法來要求 IAccessibleEx 介面。 如需詳細資訊,請參閱 從用戶端使用 IAccessibleEx。 從 .NET Framework 4.7.1 開始,IServiceProvider 和 IAccessibleEx(若適用)可用於 WinForms 輔助功能物件。
.NET Framework 4.7.1 新增對下列 UI 自動化模式和屬性的支援:
ToolStripSplitButton 與 ComboBox 控制項支援 展開/折疊模式。
ToolStripMenuItem 控制項具有 ControlType 屬性值 ControlType.MenuItem。
ToolStripItem 控制支援 NameProperty 屬性和展開/折疊模式。
當下拉式清單展開或折疊時,ToolStripDropDownItem 控件支援 AccessibleEvents 指出 StateChange 和 NameChange。
ToolStripDropDownButton 控件具有 ControlType 屬性值為 ControlType.MenuItem。
NumericUpDown 和 DomainUpDown 控件支援 NameProperty 屬性,並具有 ControlType.Spinner的 控制類型。
PropertyGrid 控件的改善 .NET Framework 4.7.1 會將下列改善新增至 PropertyBrowser 控件:當使用者在 PropertyGrid 控件中輸入不正確的值時,錯誤對話框中的 詳細數據 按鈕會顯示,並支援 展開/折疊模式、狀態和名稱變更通知,以及具有 ControlType.MenuItem值的 ControlType 屬性。
展開錯誤對話方塊的 [詳細資料] 按鈕時所顯示的訊息窗格現在可透過鍵盤存取,並允許朗讀程式宣告錯誤訊息的內容。
PropertyGrid 控件中的第 AccessibleRole 行已從「Row」變更為「Cell」。 儲存格會對應到UIA控制類型“DataItem”,從而支援適當的鍵盤快捷鍵和畫面助讀程式提示。
當 PropertyGrid 控件的 PropertySort 屬性被設定為 PropertySort.Categorized 時,代表標頭專案的 PropertyGrid 控件數據列具有 ControlType 屬性值為 ControlType.Button。
當 PropertyGrid 控件的 PropertySort 屬性設定為 PropertySort.Categorized 時,代表標頭專案的 PropertyGrid 控件數據列支援 展開/折疊模式。
已改善網格與上方工具列之間的鍵盤導航。 按下 「Shift-Tab」 現在會選取第一個 [工具列] 按鈕,而不是整個 ToolBar。
PropertyGrid 控件現在在高對比度模式中顯示時,會在與目前 PropertySort 屬性值對應的工具欄按鈕周圍繪製一個焦點矩形。
PropertyGrid 在高對比度模式下顯示的控件,當 PropertySort 屬性設定為 PropertySort.Categorized 時,現在會以高對比度的顏色顯示類別標題的背景。
PropertyGrid 控制項能更好地區分具有焦點的 ToolBar 項目,與指出 PropertySort 屬性目前值的 ToolBar 項目。 此修正包含高對比度調整,以及非高對比度情境的變更。
PropertyGrid 控制工具列項目,表示 PropertySort 屬性的當前值支援 TogglePattern。
改善旁白功能以便更清晰地區分對齊選擇器中選定的對齊方式。
當表單上顯示空白 PropertyGrid 控件時,它現在可以獲得先前無法得到的焦點。
在高對比度主題中使用操作系統定義的色彩
- Button 和 CheckBox 控件,其 FlatStyle 屬性設定為 FlatStyle.System(這是預設樣式),在選取高對比度主題時,現在使用作業系統定義的色彩。 以前,文字和背景色彩沒有對比,而且很難閱讀。
-
Button、CheckBox、RadioButton、Label、LinkLabel和 GroupBox 控件在其 Enabled 屬性設定為 false 時,會使用陰影色彩在高對比度主題中呈現文字,導致與背景的對比度降低。 現在這些控制項會使用作業系統所定義的「已停用文字」色彩。 此修正適用於將
FlatStyle
屬性設定為 FlatStyle.System以外的值的控件。 OS 會轉譯後者的控件。 - DataGridView 現在會在具有目前焦點的儲存格內容周圍呈現可見的矩形。 先前在某些高對比度主題中看不到此內容。
- ToolStripMenuItem 控件,其 Enabled 屬性設定為 false 現在使用操作系統定義的「停用文字」色彩。
- ToolStripMenuItem 控件的 Checked 屬性設定為 true true 現在會在對比系統色彩中轉譯相關聯的複選標記。 之前的勾選記號顏色不夠對比,而且在高對比度主題中不容易看見。 注意:Windows 10 已變更某些高對比度系統色彩的值。 Windows Forms 架構是以 Win32 架構為基礎。 為了獲得最佳體驗,請在最新版本的 Windows 上執行,並在測試應用程式中加入 app.manifest 檔案後,解除註解以下程式碼,以選用最新的 OS 變更:
<!-- Windows 10 -->
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />
改進的鍵盤導航
- 當 ComboBox 控件的 DropDownStyle 屬性設定為 ComboBoxStyle.DropDownList,而且是窗體上定位順序中的第一個控件時,它現在會在使用鍵盤開啟父窗體時顯示焦點矩形。 在此變更之前,鍵盤焦點位於此控制項上,但未顯示焦點指示器。
改善朗讀程式支援
MonthCalendar 控件現在增加了輔助技術的支持,使得像朗讀程式這樣的工具現在可以讀取此前無法讀取的控件值。
CheckedListBox 控件現在會在 CheckBox.CheckState 屬性變更時通知朗讀程式。 先前,朗讀程式未收到通知,因此使用者不會被告知已更新 CheckState 屬性。
LinkLabel 控件已經改變向朗讀者通知控件中文字的方式。 此前,Narrator 程式曾兩次宣讀此文本,並將「&」符號作為真實文本讀出,即使使用者無法看見這些符號也是如此。 重複的文字及不必要的「&」符號已從朗讀程式的公告中被移除。
DataGridViewCell 控件類型現在已正確向朗讀程式和其他輔助技術報告只讀狀態。
敘述者現在可以在 [Multiple-Document 介面] ~/docs/framework/winforms/advanced/multiple-document-interface-mdi-applications.md 應用程式中讀取子視窗的系統選單。
朗讀程式現在能夠讀取 ToolStripMenuItem 控件,並將 ToolStripItem.Enabled 屬性設定為 false。 先前,朗讀程式無法將焦點放在停用的選單項目上來讀取內容。
名字 | 價值 |
---|---|
範圍 | 主要 |
版本 | 4.8 |
類型 | 重定向 |
受影響的 API
- ToolStripDropDownButton.CreateAccessibilityInstance()
- DomainUpDown.DomainUpDownAccessibleObject.Name
- MonthCalendar.AccessibilityObject
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 控制項不再被螢幕助讀程式宣告為「無項目可檢視」。
即時區域支援
螢幕助讀程式,例如朗讀程式,通常藉由描述目前具有焦點的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()
Selector SelectionChanged 事件和 SelectedValue 属性
詳情
從 .NET Framework 4.7.1 開始,當 Selector 的選擇變更時,一律會先更新其 SelectedValue 屬性的值,再引發 SelectionChanged 事件。 這使得 SelectedValue 屬性與其他選取屬性 (SelectedItem 和 SelectedIndex) 保持一致,這會在引發事件之前更新。
在 .NET Framework 4.7 和舊版中,大部分情況下,SelectedValue 的更新會在事件之前發生,但如果選取範圍變更是由變更 SelectedValue 屬性所造成,就會在事件之後發生。
建議
以 .NET Framework 4.7.1 或更新版本為目標的應用程式可以退出這項變更,並將下列內容新增至應用程式組態檔的 <runtime>
區段,以使用舊版行為:
<runtime>
<AppContextSwitchOverrides
value="Switch.System.Windows.Controls.TabControl.SelectionPropertiesCanLagBehindSelectionChangedEvent=true" />
</runtime>
以 .NET Framework 4.7 或更早版本為目標但是在 .NET Framework 4.7.1 或更新版本上執行的應用程式,可以將下列這一行新增至應用程式 .configuration 檔案的 <runtime>
區段,以啟用新的行為:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Controls.TabControl.SelectionPropertiesCanLagBehindSelectionChangedEvent=false" />
</runtime>
名字 | 價值 |
---|---|
範圍 | 次要 |
版本 | 4.7.1 |
類型 | 重定向廣告 |
受影響的 API
TabControl SelectionChanged 事件和 SelectedContent 屬性
詳細資訊
從 .NET Framework 4.7.1 開始,TabControl 會在選取變更時,先更新其 SelectedContent 屬性的值,再引發 SelectionChanged 事件。在 .NET Framework 4.7 和舊版中,SelectedContent 的更新會在事件之後發生。
建議
以 .NET Framework 4.7.1 或更新版本為目標的應用程式可以選擇不使用此變更,並將下列內容新增至應用程式組態檔的 <runtime>
區段以使用舊版行為:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Controls.TabControl.SelectionPropertiesCanLagBehindSelectionChangedEvent=true" />
</runtime>
以 .NET Framework 4.7 或更早版本為目標但是在 .NET Framework 4.7.1 或更新版本上執行的應用程式,可以將下列這一行新增至應用程式 .configuration 檔案的 <runtime>
區段,以啟用新的行為:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Controls.TabControl.SelectionPropertiesCanLagBehindSelectionChangedEvent=false" />
</runtime>
名字 | 價值 |
---|---|
範圍 | 次要 |
版本 | 4.7.1 |
類型 | 再行銷 |
受影響的 API
WPF PackageDigitalSignatureManager 的預設哈希演算法現在是 SHA256
詳情
System.IO.Packaging.PackageDigitalSignatureManager
提供與 WPF 套件相關的數位簽名功能。 在 .NET Framework 4.7 和舊版中,用於簽署套件部分的預設演算法(PackageDigitalSignatureManager.DefaultHashAlgorithm)是 SHA1。 由於最近對SHA1的安全性考慮,從 .NET Framework 4.7.1 開始,此預設值已變更為SHA256。 這項變更會影響所有套件簽署,包括 XPS 檔。
建議
想要在目標版本低於 .NET Framework 4.7.1 的架構中利用此變更的開發人員,或需要在目標為 .NET Framework 4.7.1 或更高版本時維持之前功能的開發人員,可以適當地設定下列 AppContext 旗標。 true 的值會使 SHA1 被用來作為預設演算法;false 會使 SHA256 被用來。
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.MS.Internal.UseSha1AsDefaultHashAlgorithmForDigitalSignatures=true"/>
</runtime>
</configuration>
名字 | 價值 |
---|---|
範圍 | 邊緣 |
版本 | 4.7.1 |
類型 | 再行銷 |
受影響的 API
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 |
類型 | 重新定位 |
.NET Framework 4.7.2
核心
允許 URI 中的 Unicode 雙向控制字元
詳情
Unicode 會指定數個用來指定文字方向的特殊控制字元。 在舊版 .NET Framework 中,即使這些字元以百分比編碼的形式存在,這些字元仍會從所有 URI 中錯誤地去除。 為了更妥善地遵循 RFC 3987,我們現在允許在統一資源識別碼(URI)中使用這些字元。 在 URI 中發現未編碼字元時,會以百分比方式編碼。 找到百分比編碼時,它們會保留 as-is。
建議
針對以 4.7.2 開始之 .NET Framework 版本為目標的應用程式,預設會啟用 Unicode 雙向字元的支援。 如果不需要這項變更,您可以將下列 AppContextSwitchOverrides 新增至應用程式組態檔的 <runtime>
區段,以停用它:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Uri.DontKeepUnicodeBidiFormattingCharacters=true" />
</runtime>
針對以舊版 .NET Framework 為目標但以 .NET Framework 4.7.2 開頭的版本執行的應用程式,預設會停用 Unicode 雙向字元的支援。 您可以通過在應用程式組態檔的 [<runtime>
] 區段中加入下列 AppContextSwitchOverrides 開關來啟用它:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Uri.DontKeepUnicodeBidiFormattingCharacters=false" />
</runtime>
名字 | 價值 |
---|---|
範圍 | 次要 |
版本 | 4.7.2 |
類型 | 再行銷 |
受影響的 API
DeflateStream 使用原生 API 進行解壓縮
詳細資訊
從 .NET Framework 4.7.2 開始,T:System.IO.Compression.DeflateStream
類別中的解壓縮實作預設已變更為使用原生 Windows API。 一般而言,這會導致大幅提升效能。 以 .NET Framework 4.7.2 版或更新版本為目標的所有 .NET 應用程式都會使用原生實作。這項變更可能會導致行為有一些差異,包括:
- 例外狀況訊息可能不同。 不過,拋出的例外狀況類型會維持不變。
- 某些特殊情況,例如沒有足夠的記憶體來完成作業,可能會以不同的方式處理。
- 解析 gzip 標頭時會有已知差異(注意:僅影響用於解壓縮的
GZipStream
設置): - 剖析無效標頭時可能會在不同的時間擲回例外狀況。
- 原生實作會強制 gzip 標頭內某些保留旗標的值(也就是 FLG)依照規範強制設定,這可能會導致它對先前被忽略的無效值擲回例外。
建議
如果原生 API 的解壓縮對應用程式行為產生不良影響,您可以在 app.config 檔案的 runtime
區段新增 Switch.System.IO.Compression.DoNotUseNativeZipLibraryForDecompression
參數,並將其設定為 true
,以選擇退出此功能:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.IO.Compression.DoNotUseNativeZipLibraryForDecompression=true" />
</runtime>
</configuration>
名字 | 價值 |
---|---|
範圍 | 次要 |
版本 | 4.7.2 |
類型 | 再定位 |
受影響的 API
確保 System.Uri 使用統一的保留字元集
詳情
在 System.Uri中,某些有時譯碼的百分比編碼字元現在會一致地保留編碼。 在存取 URI 的路徑、查詢、片段或 userinfo 元件的屬性和方法中,這種情況可能會出現。 只有在下列兩項都成立時,行為才會變更:
- URI 包含下列任何保留字元的編碼形式:
:
、'
、(
、)
、!
或*
。 - URI 包含 Unicode 或編碼的非保留字元。 如果上述兩者都為 true,則編碼的保留字元會保持編碼狀態。 在舊版的 .NET Framework 中,它們會被解碼。
建議
針對以 4.7.2 開始之 .NET Framework 版本為目標的應用程式,預設會啟用新的譯碼行為。 如果您不想要這個變更,可以將下列 AppContextSwitchOverrides 加入到應用程式組態檔的 <runtime>
區段中,以停用它:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Uri.DontEnableStrictRFC3986ReservedCharacterSets=true" />
</runtime>
針對以舊版 .NET Framework 為目標但以 .NET Framework 4.7.2 開始的版本執行的應用程式,預設會停用新的譯碼行為。 您可以將下列 AppContextSwitchOverrides 切換至應用程式組態檔的 [<runtime>
] 區段來啟用它:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Uri.DontEnableStrictRFC3986ReservedCharacterSets=false" />
</runtime>
名字 | 價值 |
---|---|
範圍 | 次要 |
版本 | 4.7.2 |
類型 | 重定向 |
受影響的 API
Resgen 拒絕從 Web 載入內容
詳細資訊
.resx 檔案可能包含二進位格式輸入。 如果您嘗試使用 resgen 載入從不受信任的位置下載的檔案,則預設將無法載入輸入。
建議
需要從不受信任的位置載入二進位格式輸入的 Resgen 使用者,可以移除來自網頁的標記,或套用選擇退出的規則。新增下列登錄設定以套用系統範圍內的選擇退出規則:[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft.NETFramework\SDK] “AllowProcessOfUntrustedResourceFiles”=“true”
名字 | 價值 |
---|---|
範圍 | 邊緣 |
版本 | 4.7.2 |
類型 | 重定向廣告 |
在使用可攜式 PDB 時,若有要求,所獲得的堆疊追蹤將會包含來源檔案和行資訊。
詳情
從 .NET Framework 4.7.2 開始,使用可攜式 PDB 時取得的堆棧追蹤會包含要求的來源檔案和行資訊。 在 .NET Framework 4.7.2 之前的版本中,即便有明確要求,使用可攜式 PDB 仍無法取得行信息和原始檔資訊。
建議
針對以 .NET Framework 4.7.2 為目標的應用程式,如果不需要來源檔案和行資訊,則在使用可攜式 PDB 時,可以選擇退出,方法是在您的 app.config
檔案的 <runtime>
區段中添加以下內容:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Diagnostics.IgnorePortablePDBsInStackTraces=true" />
</runtime>
針對以舊版 .NET Framework 為目標但在 .NET Framework 4.7.2 或更新版本執行的應用程式,若要在使用可攜式 PDB時選擇包含來源檔案和行資訊,您可以將下列內容新增至 app.config
檔案的 <runtime>
區段:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Diagnostics.IgnorePortablePDBsInStackTraces=false" />
</runtime>
名字 | 價值 |
---|---|
範圍 | 邊緣 |
版本 | 4.7.2 |
類型 | 重定向目標 |
受影響的 API
Windows Forms
適用於 .NET 4.7.2 的 Windows Forms 控件輔助功能改善
詳情
Windows Forms 架構正在改善它與輔助功能技術搭配運作的方式,以更好地支援 Windows Forms 客戶。 其中包括下列變更:
- 在高對比模式下改善顯示設定的變更。
- 針對 DataGridView 和 MenuStrip 控制項中的鍵盤瀏覽進行更改。
- 與朗讀程式互動的變更。
建議
如何選擇加入或退出這些變更 為了讓應用程式受益於這些變更,它必須在 .NET Framework 4.7.2 或更新版本上執行。 應用程式可以透過下列任一種方式受益於這些變更:
- 它會重新編譯,目標鎖定於 .NET Framework 4.7.2。 這些輔助功能變更預設會在以 .NET Framework 4.7.2 或更新版本為目標的 Windows Forms 應用程式上啟用。
- 它將 .NET Framework 4.7.1 或更早版本作為目標,透過在應用程式組態檔的
<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;Switch.UseLegacyAccessibilityFeatures.2=false" />
</runtime>
</configuration>
請注意,若要啟用 .NET Framework 4.7.2 中新增的輔助功能,您也必須選擇啟用 .NET Framework 4.7.1 的輔助功能。 以 .NET Framework 4.7.2 或更新版本為目標且想要保留舊版輔助功能行為的應用程式,可以藉由明確將此 AppContext 參數設定為 true
,選擇使用舊版輔助功能功能。
在高對比度主題中使用操作系統定義的色彩
- ToolStripDropDownButton 的下拉式箭號現在在高對比度主題中使用作業系統定義的色彩。
- Button、RadioButton 和 CheckBox 控件,在 FlatStyle 設為 FlatStyle.Flat 或 FlatStyle.Popup 時,現在在高對比主題中選取時使用作業系統定義的顏色。 以前,文字和背景色彩沒有對比,而且很難閱讀。
-
GroupBox 中包含的控件,其 Enabled 屬性設定為
false
現在會在高對比度主題中使用OS定義的色彩。 - ToolStripButton、ToolStripComboBox和 ToolStripDropDownButton 控件在高對比度模式中具有較高的亮度對比比例。
- DataGridViewLinkCell 預設會針對 DataGridViewLinkCell.LinkColor 屬性使用高對比度模式中的OS定義色彩。 注意:Windows 10 已變更某些高對比度系統色彩的值。 Windows Forms 架構是以 Win32 架構為基礎。 為了獲得最佳體驗,請在最新版本的 Windows 上執行,並加入測試應用程式中的 app.manifest 檔案,並取消批注下列程式碼,以選擇加入最新的 OS 變更:
<!-- Windows 10 -->
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />
改善旁白支援
- 朗讀程式現在會在朗讀 ToolStripMenuItem的文字時,宣告 ToolStripMenuItem.ShortcutKeys 屬性的值。
- 朗讀程式現在表示 ToolStripMenuItem 的 Enabled 屬性設定為
false
。 - 當 ListView.CheckBoxes 屬性設定為
true
時,朗讀程式現在會提供複選框狀態的回饋。 - 朗讀程序掃描模式焦點順序現在與 ClickOnce 下載對話框視窗上控件的視覺順序一致。
DataGridView 輔助功能支援的改善
- 現在可以使用鍵盤來排序 DataGridView 中的數據列。 現在使用者可以使用 F3 鍵,依目前欄進行排序。
- 當 DataGridView.SelectionMode 設定為 DataGridViewSelectionMode.FullRowSelect時,欄標題會變更色彩,以指示目前欄,當使用者在目前行中的儲存格間切換時。
- DataGridViewCell.DataGridViewCellAccessibleObject.Parent 屬性現在會傳回正確的父控件。
改善的視覺提示
- 具有空白 Text 屬性的 RadioButton 和 CheckBox 控件現在會在收到焦點時顯示焦點指標。
改善的屬性網格支援
只有在啟用 PropertyGrid 元素時,PropertyGrid 控件子元素現在才會傳回 IsReadOnlyProperty 屬性的
true
。只有在使用者可以變更 PropertyGrid 元素時,PropertyGrid 控件子元素現在才會傳回 IsEnabledProperty 屬性的
改進的鍵盤導航false
。 如需 UI 自動化的概觀,請參閱 UI 自動化概觀。當 ToolStripPanel 內已將 TabStop 屬性設定為
true
時,ToolStripButton 現在允許焦點。
名字 | 價值 |
---|---|
範圍 | 主要 |
版本 | 4.7.2 |
類型 | 重定位 |
ContextMenuStrip.SourceControl 屬性在巢狀 ToolStripMenuItems 的情況下包含有效的控制元件
詳細資訊
在 .NET Framework 4.7.1 和舊版中,當使用者從巢狀 ToolStripMenuItem 控件開啟功能表時,ContextMenuStrip.SourceControl 屬性會錯誤地傳回 null。 在 .NET Framework 4.7.2 和更新版本中,SourceControl 屬性一律設定為實際的原始檔控制。
建議
如何選擇加入或退出這些變更 為了讓應用程式能夠受益於這些變更,它必須在 .NET Framework 4.7.2 或更新版本上執行。 應用程式可以透過下列任一種方式受益於這些變更:
- 它會以 .NET Framework 4.7.2 為目標。 此變更預設會在以 .NET Framework 4.7.2 或更新版本為目標的 Windows Forms 應用程式上啟用。
- 它會以 .NET Framework 4.7.1 或舊版為目標,並將下列 AppContext Switch 新增至 app.config 檔案的
<runtime>
區段,並將其設定為false
,以退出舊版輔助功能行為,如下列範例所示。
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Forms.UseLegacyContextMenuStripSourceControlValue=false"/>
</runtime>
以 .NET Framework 4.7.2 或更新版本為目標的應用程式,而且想要保留舊版行為,可以藉由明確將此 AppContext 參數設定為 true
,選擇使用舊版原始檔控制值。
名字 | 價值 |
---|---|
範圍 | 邊緣 |
版本 | 4.7.2 |
類型 | 重定向 |
受影響的 API
PrivateFontCollection.AddFontFile 方法會釋放 Font 資源
詳情
在 .NET Framework 4.7.1 和舊版本中,System.Drawing.Text.PrivateFontCollection 類別在處置 PrivateFontCollection 之後,不會釋放那些透過使用 AddFontFile(String) 方法添加到此集合中的 Font 物件的 GDI+ 字型資源。 在 .NET Framework 4.7.2 和更新版本中,Dispose 發行已新增至集合作為檔案的 GDI+ 字型。
建議
如何選擇加入或退出這些變更 為了讓應用程式受益於這些變更,它必須在 .NET Framework 4.7.2 或更新版本上執行。 應用程式可以透過下列任一種方式受益於這些變更:
- 它已重新編譯,目標為 .NET Framework 4.7.2。 此變更預設會在以 .NET Framework 4.7.2 或更新版本為目標的 Windows Forms 應用程式上啟用。
- 它會以 .NET Framework 4.7.1 或舊版為目標,並將下列 AppContext Switch 新增至 app.config 檔案的
<runtime>
區段,並將其設定為false
,以退出舊版輔助功能行為,如下列範例所示。
<runtime>
<AppContextSwitchOverrides value="Switch.System.Drawing.Text.DoNotRemoveGdiFontsResourcesFromFontCollection=false"/>
</runtime>
以 .NET Framework 4.7.2 或更新版本為目標的應用程式,而且想要保留舊版行為,可以藉由明確地將此 AppContext 參數設定為 true
,選擇不釋放字型資源。
名字 | 價值 |
---|---|
範圍 | 邊緣 |
版本 | 4.7.2 |
類型 | 重定向行銷 |
受影響的 API
WinForm 的網域上按鈕和向下按鈕動作現在已同步
詳情
在 .NET Framework 4.7.1 和之前的版本中,當控件文字存在時,會忽略 DomainUpDown 控件的 DomainUpDown.UpButton() 動作,開發人員必須在使用 DomainUpDown.UpButton() 動作之前,先在控件上使用 DomainUpDown.DownButton() 動作。 從 .NET Framework 4.7.2 開始,DomainUpDown.UpButton() 和 DomainUpDown.DownButton() 動作都會在此案例中獨立運作,並保持同步。
建議
為了讓應用程式受益於這些變更,它必須在 .NET Framework 4.7.2 或更新版本上執行。 應用程式可以透過下列任一種方式受益於這些變更:
- 它會重新針對 .NET Framework 4.7.2 進行編譯。 此變更預設會在以 .NET Framework 4.7.2 或更新版本為目標的 Windows Forms 應用程式上啟用。
- 它退出舊版捲動行為,方法是將下列 AppContext Switch 新增至應用程式組態檔的
<runtime>
區段,並將其設定為false
,如下列範例所示。
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Forms.DomainUpDown.UseLegacyScrolling=false"/>
</runtime>
名字 | 價值 |
---|---|
範圍 | 邊緣 |
版本 | 4.7.2 |
類型 | ** 重定向 |
受影響的 API
Windows Presentation Foundation (WPF)
鍵盤焦點現在會在 WinForms/WPF 承載的多層之間正確移動
詳細資訊
請考慮一個 WPF 應用程式,其中裝載了一個 WinForms 控制項,而該控制項又裝載了 WPF 控制項。 如果 WinForms 層中的第一個或最後一個控制項是 WPF System.Windows.Forms.Integration.ElementHost
,則使用者可能無法使用 Tab 鍵離開該層。 這項變更修正了此問題,而且用戶現在可以從 WinForms 層中切換出去。依賴焦點不會從 WinForms 層逸出的自動化應用程式可能不再如預期運作。
建議
想要在以 .NET 4.7.2 以下架構版本為目標的開發人員,可以將下列一組 AppContext 旗標設定為 false,以便啟用變更。
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false;Switch.UseLegacyAccessibilityFeatures.2=false"/>
</runtime>
</configuration>
WPF 應用程式必須啟用所有初期的輔助功能改進,才能獲得後續的改善。 換句話說,Switch.UseLegacyAccessibilityFeatures
和 Switch.UseLegacyAccessibilityFeatures.2
開關都必須設定。需要先前功能的開發人員,在以 .NET 4.7.2 或更新版本為目標時,可以將下列 AppContext 標誌設定為 true,以停用變更。
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures.2=true"/>
</runtime>
</configuration>
名字 | 價值 |
---|---|
範圍 | 邊緣 |
版本 | 4.7.2 |
類型 | 再定位 |
WPF 標記編譯程式的預設哈希演算法現在是SHA256
詳情
WPF MarkupCompiler 提供 XAML 標記檔案的編譯服務。 在 .NET Framework 4.7.1 和舊版中,用於總和檢查碼的預設哈希演算法是 SHA1。 由於最近對 SHA1 的安全性考慮,從 .NET Framework 4.7.2 開始,此預設值已變更為 SHA256。 這項變更會影響編譯期間標記檔案的所有總和檢查碼產生。
建議
以 .NET Framework 4.7.2 或更新版本為目標且想要還原為SHA1 哈希行為的開發人員,必須設定下列AppContext旗標。
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Markup.DoNotUseSha256ForMarkupCompilerChecksumAlgorithm=true"/>
</runtime>
</configuration>
想要在以 .NET 4.7.2 以下的架構版本為目標時使用SHA256哈希的開發人員必須設定下列AppContext旗標。 請注意,已安裝的 .NET Framework 版本必須是 4.7.2 或更新版本。
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Markup.DoNotUseSha256ForMarkupCompilerChecksumAlgorithm=false"/>
</runtime>
</configuration>
名字 | 價值 |
---|---|
範圍 | 透明 |
版本 | 4.7.2 |
類型 | 再定位 |
WPF AppDomain 現在可能會在清理弱事件時呼叫 Dispatcher.Invoke 進行關機處理
詳細資訊
在 .NET Framework 4.7.1 和舊版中,WPF 可能會在 AppDomain 關機期間,在 .NET 完成項線程上建立 System.Windows.Threading.Dispatcher。 這是在 .NET Framework 4.7.2 和更高版本中修正的,透過使弱事件的清除具備線程感知能力。 因此,WPF 可能會呼叫 Dispatcher.Invoke 來完成清除程序。在某些應用程式中,這項終結器計時的變更可能會導致 AppDomain 或程序關閉期間發生例外狀況。 通常會在應用程式未能在進程或 AppDomain 關閉之前正確關閉運行在工作執行緒上的發送器時,看到此情況。 這類應用程式應該負責妥善管理發送器的存留期。
建議
在 .NET Framework 4.7.2 和更新版本中,開發人員可以停用此修正,以協助緩解(但不會消除)因清除變更而可能發生的計時問題。若要停用清除中的變更,請使用下列 AppContext 旗標。
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.MS.Internal.DoNotInvokeInWeakEventTableShutdownListener=true"/>
</runtime>
</configuration>
名字 | 價值 |
---|---|
範圍 | Edge 瀏覽器 |
版本 | 4.7.2 |
類型 | 重定向 |
WPF 在主要/詳細數據案例中顯示 ADO 數據時變更主鍵
詳細資訊
假設您有一個類型為 Order
的 ADO 項目集合,並且有一個名為「OrderDetails」的關聯,其通過主鍵「OrderID」與類型 Detail
的項目集合相關聯。 在 WPF 應用程式中,您可以將清單控制項系結至指定訂單的詳細資料:
<ListBox ItemsSource="{Binding Path=OrderDetails}" >
其中 DataContext 是 Order
。 WPF 會取得 OrderDetails
屬性的值 - 所有 Detail
專案的集合 D,其 OrderID
符合主專案的 OrderID
。 當您變更主要項目的主鍵 OrderID
時,行為的改變就會發生。 ADO 會自動變更 Details 集合中每個受影響記錄的 OrderID
,換言之,就是那些被複製到集合 D 的記錄。 但 D 會發生什麼事?
- 舊行為:清除集合 D。 主要專案不會 不會 針對 屬性
OrderDetails
引發變更通知。 ListBox 仍然使用集合 D,現在已空。 - 新行為:集合 D 不變。 每個項目都會針對
OrderID
屬性引發變更通知。 ListBox 會繼續使用集合 D,並使用新的OrderID
顯示詳細數據。 WPF 會以不同的方式建立集合 D 來實作新行為:藉由呼叫 ADO 方法 DataRowView.CreateChildView(DataRelation, Boolean),並將followParent
自變數設定為true
。
建議
應用程式會使用下列 AppContext 開關來獲得新的行為。
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Data.DoNotUseFollowParentWhenBindingToADODataRelation=false"/>
</runtime>
</configuration>
針對以 .NET 4.7.1 或以下版本為目標的應用程式,參數預設為 true
(舊行為);針對以 .NET 4.7.2 或更高版本為目標的應用程式,預設為 false
(新行為)。
名字 | 價值 |
---|---|
範圍 | 次要 |
版本 | 4.7.2 |
類型 | 再目標 |
當 WPF 的 RadioButton 和 CheckBox 控件沒有內容時,其焦點可視化現在會正確顯示。
詳細資訊
在 .NET Framework 4.7.1 和舊版中,WPF System.Windows.Controls.CheckBox 和 System.Windows.Controls.RadioButton 具有不一致,而且在傳統和高對比度主題中,焦點視覺效果不正確。 當控件沒有任何內容集時,就會發生這些問題。 這會使主題之間的轉換變得令人困惑,而焦點視覺效果難以看到。 在 .NET Framework 4.7.2 中,這些視覺效果現在在主題之間更加一致,而且在傳統和高對比度主題中更容易看到。
建議
以 .NET Framework 4.7.2 為目標的開發人員,想要還原為 .NET 4.7.1 中的行為,必須設定下列 AppContext 旗標。
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures.2=true;"/>
</runtime>
</configuration>
要在以 .NET 4.7.2 以下框架版本為目標的開發人員必須設定下列 AppContext 標誌。請注意,所有標誌都必須適當地設定,且已安裝的 .NET Framework 版本必須是 4.7.2 或更高版本。WPF 應用程式需要選擇加入所有先前的無障礙功能改進,以獲得最新的改進功能。 若要這樣做,請確定 AppContext 參數 'Switch.UseLegacyAccessibilityFeatures' 和 'Switch.UseLegacyAccessibilityFeatures.2' 都設定為 false。
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false;Switch.UseLegacyAccessibilityFeatures.2=false;"/>
</runtime>
</configuration>
名字 | 價值 |
---|---|
範圍 | 邊緣 |
版本 | 4.7.2 |
類型 | 重定向目標 |
WPF TextBox/PasswordBox 文字選取未遵循系統色彩
詳細資訊
在 .NET Framework 4.7.1 及其更早的版本中,WPF System.Windows.Controls.TextBox
和 System.Windows.Controls.PasswordBox
只能在裝飾層中呈現文字選取範圍。 在某些系統主題中,這會遮蔽文字,使其難以閱讀。 在 .NET Framework 4.7.2 和更新版本中,開發人員可以選擇啟用非 Adorner 型的選取轉譯配置,以減輕此問題。
建議
想要使用此變更的開發人員必須適當地設定下列AppContext旗標。 若要利用這項功能,已安裝的 .NET Framework 版本必須是 4.7.2 或更新版本。若要啟用非裝飾項為基礎的選取功能,請使用下列 AppContext 旗標。
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Controls.Text.UseAdornerForTextboxSelectionRendering=false"/>
</runtime>
</configuration>
名字 | 價值 |
---|---|
範圍 | Edge 瀏覽器 |
版本 | 4.7.2 |
類型 | 重定向廣告 |
Windows Workflow Foundation (WF)
避免 IWorkflowInstanceManagement.TransactedCancel 和 IWorkflowInstanceManagement.TransactedTerminate 的無休止遞歸
詳情
在某些情況下,使用 IWorkflowInstanceManagement.TransactedCancel 或 IWorkflowInstanceManagement.TransactedTerminate API 取消或終止工作流程服務實例時,當 Workflow
運行時嘗試將服務實例保存為處理要求的一部分時,可能會出現堆疊溢位。 此問題會發生在工作流程實例正等待其他未完成的 WCF 請求完成時。
TransactedCancel
和 TransactedTerminate
作業會建立工作流程服務實例佇列的工作專案。 這些工作專案不會在處理 TransactedCancel/TransactedTerminate
要求時執行。 由於工作流程服務實例正忙於等候其他未完成的 WCF 請求完成,因此建立的工作項目會保持在佇列中。
TransactedCancel/TransactedTerminate
作業完成,控制權會傳回給用戶端。 當與 TransactedCancel/TransactedTerminate
作業相關聯的交易嘗試提交時,它必須持久化工作流程服務實例的狀態。 但由於實例有未完成的 WCF
要求,工作流程運行時間無法保存工作流程服務實例,而無休止的遞歸循環會導致堆棧溢位。由於 TransactedCancel
和 TransactedTerminate
只會在記憶體中建立工作專案,因此交易存在的事實沒有任何作用。 交易的復原不會捨棄工作專案。為了解決此問題,從 .NET Framework 4.7.2 開始,我們引進了可新增至工作流程服務 web.config/app.config
的 AppSetting
,告知它忽略 TransactedCancel
和 TransactedTerminate
的交易。 這可讓交易提交,而不需要等待工作流程實例的持久化。 此功能的應用程式設置項目名為 microsoft:WorkflowServices:IgnoreTransactionsForTransactedCancelAndTransactedTerminate
。
true
值表示應該忽略交易,以避免堆疊溢位。 此 AppSetting 的預設值為 false
,因此現有的工作流程服務實例不會受到影響。
建議
如果您使用 AppFabric 或其他 IWorkflowInstanceManagement 用戶端,而且嘗試取消或終止工作流程實例時,在工作流程服務實例中遇到堆棧溢位,您可以將下列內容新增至工作流程服務 web.config/app.config 檔案的 [<appSettings>
] 區段:
<add key="microsoft:WorkflowServices:IgnoreTransactionsForTransactedCancelAndTransactedTerminate" value="true"/>
如果您未遇到問題,就不需要這麼做。
名字 | 價值 |
---|---|
範圍 | 邊緣 |
版本 | 4.7.2 |
類型 | 重定向廣告 |