原文地址:https://devblogs.microsoft.com/dotnet/announcing-the-net-framework-4-8/html
咱們很高興地宣佈今天發佈.NET Framework 4.8。它包含在Windows 10 2019 May更新中。.NET Framework 4.8也能夠在Windows 7+和Windows Server 2008 R2 +上使用。git
您能夠從咱們的 .NET下載站點安裝.NET 4.8 。要構建面向.NET Framework 4.8的應用程序,能夠下載.NET 4.8開發人員包。若是您只想要.NET 4.8運行時,能夠嘗試:github
.NET Framework 4.8包含更新的工具集以及幾個方面的改進:算法
您能夠在.NET Framework 4.8發行說明中看到完整的改進列表 。 .NET 4.8也更新了參考源。windows
Windows客戶端版本: Windows 10版本1903,Windows 10版本1809,Windows 10版本1803,Windows 10版本1709,Windows 10版本1703,Windows 10版本1607,Windows 8.1,Windows 7 SP1
Windows Server版本: Windows Server 2019,Windows Server版本1803,Windows Server 2016,Windows Server 2012,Windows Server 2012 R2,Windows Server 2008 R2 SP1api
.NET 4.8中的JIT基於.NET Core 2.1。如今,.NET Framework中提供了全部錯誤修復和.NET Core 2.1中許多基於代碼生成的性能優化。數組
.NET Framework中的NGEN映像再也不包含可寫和可執行部分。這減小了可用於經過修改將要執行的內存來執行任意代碼的攻擊的表面區域。性能優化
雖然在運行時內存中仍然存在可寫和可執行數據,但此更改會刪除從NGEN映像映射的數據,從而容許它們在不容許圖像中的可執行/可寫部分的受限環境中運行。併發
在之前版本的.NET Framework中,Windows Defender或第三方反惡意軟件會自動掃描從磁盤加載的全部程序集以查找惡意軟件。可是,從其餘地方加載的程序集(例如使用Assembly.Load(byte []))將不會被掃描,而且可能會檢測到未檢測到的病毒。app
Windows 10上的.NET Framework 4.8會觸發Windows Defender和許多其餘實現反惡意軟件掃描接口的反惡意軟件解決方案對這些程序集的掃描。咱們但願這會使惡意軟件更難以在.NET程序中假裝本身。
從.NET Framework 4.5開始,咱們使用 clrcompression.dll中http://zlib.net的ZLib本機版本(用於數據壓縮的本機外部壓縮庫) ,以便爲deflate算法提供實現。在.NET Framework 4.8中,咱們將clrcompression.dll更新爲使用版本1.2.11,其中包括幾個關鍵的改進和修復。
.NET Framework 2.0+具備加密提供程序類,例如SHA256Managed,當在「FIPS模式」下配置系統加密庫時會拋出CryptographicException。拋出這些異常是由於託管版本未通過FIPS(聯邦信息處理標準)140-2認證(JIT和NGEN映像生成都會使證書無效),這與系統加密庫不一樣。不多有開發人員將他們的開發機器置於「FIPS模式」,致使這些異常在生產(或客戶系統)中引起。.NET Framework還使用「FIPS模式」設置來阻止加密算法,這些加密算法不被FIPS規則視爲已批准的算法。
對於爲.NET Framework 4.8構建的應用程序,將再也不拋出這些異常(默認狀況下)。相反,SHA256Managed類(以及其餘託管加密類)會將加密操做重定向到系統加密庫。此策略更改有效地消除了開發人員環境與運行代碼的生產環境之間可能存在的混淆差別,並使本機組件和託管組件在相同的加密策略下運行。
針對.NET Framework 4.8的應用程序將自動切換到較新的寬鬆策略,而且在「FIPS模式」下再也不會看到從MD5Cng,MD5CryptoServiceProvider,RC2CryptoServiceProvider,RIPEMD160Managed和RijndaelManaged引起的異常。依賴於先前版本的異常的應用程序能夠經過將AppContext開關「Switch.System.Security.Cryptography.UseLegacyFipsThrow」設置爲「true」來返回到先前的行爲。
在.NET Framework 4.8中,WinForms添加了三個新功能,使開發人員可以編寫更易於訪問的應用程序。添加的功能旨在使視障用戶的應用程序數據通訊更加健壯。當用戶經過鍵盤導航時,咱們添加了對ToolTips的支持,咱們已將LiveRegions和Notification Events添加到許多經常使用控件中。
要啓用這些功能,您的應用程序須要在App.config文件中啓用如下AppContextSwitches:
UIA Live Regions容許應用程序開發人員通知屏幕閱讀器控件的文本更改,該控件位於用戶工做的位置以外。這將派上用場的示例能夠是顯示鏈接狀態的StatusStrip。若是刪除鏈接而且狀態發生更改,開發人員可能但願通知屏幕閱讀器此更改。Windows Forms已爲Label控件和StatusStrip控件實現了UIA LiveRegions。
在Label控件中使用LiveRegion的示例:
講述者如今將宣佈「準備就緒」,不管用戶在何處與應用程序進行交互。
您還能夠將UserControl實現爲Live區域:
在Windows 10 Fall Creators Update中,Windows引入了一種新方法,讓應用程序通知Narrator內容已更改,而Narrator應該宣佈更改。UIA通知事件爲您的應用程序提供了一種方式來引起UIA事件,這會致使講述人根據您爲事件提供的文本簡單地發佈通知,而無需在UI中使用相應的控件。在某些狀況下,這多是一種直接提升應用程序可訪問性的方法。有關UIA通知事件的更多信息,請參閱此博客文章。
通知可能派上用場的一個示例是通知可能須要一些時間的某個過程的進度。
提高通知事件的示例:
目前,只能經過將鼠標指針移動到控件中來觸發控制工具提示。此新功能使鍵盤用戶能夠經過使用Tab鍵或帶有或不帶修飾鍵的箭頭鍵來聚焦控件來觸發控件的工具提示。此特定輔助功能加強須要額外的AppContextSwitch,如如下示例所示:
1.建立一個新的WinForms應用程序。
2.將如下XML添加到App.config文件中。
3.將幾個按鈕和一個ToolTip控件添加到應用程序的表單中。
4.設置按鈕的工具提示。
5.運行應用程序並使用鍵盤在按鈕之間導航:
目前,可訪問的層次結構(UI自動化樹)將編輯框樹元素顯示爲當前編輯的單元格的子元素,但不顯示爲DataGridView的根子元素。可使用Inspect工具觀察層次結構樹更新:
健康端點具備許多優勢,而且編排工具普遍使用它來根據服務健康情況管理服務。監控工具還可使用運行情況檢查來跟蹤和警告服務的可用性和性能,並將其做爲早期問題指標。
ServiceHealthBehavior是一種擴展IServiceBehavior的WCF服務行爲。添加到ServiceDescription.Behaviors集合後,它將啓用如下內容:
配置ServiceHealthBehavior:
有兩種方法能夠公開運行情況端點併發布WCF服務運行情況信息:使用代碼或使用配置文件。
使用HTTP響應代碼返回服務運行情況:
能夠經過查詢參數(OnServiceFailure,OnDispatcherFailure,OnListenerFailure,OnThrottlePercentExceeded)查詢運行情況。能夠爲每一個查詢參數指定HTTP響應代碼(200 - 599)。若是省略查詢參數的HTTP響應代碼,則默認使用503 HTTP響應代碼。
查詢參數和示例:
出版服務健康情況:
啓用運行情況端點後,能夠在html中顯示服務運行情況(經過指定查詢字符串:https:// contoso:81 / Service1?運行情況)或xml(經過指定查詢字符串:https:// contoso: 81 / Service1?health&Xml)格式。https:// contoso:81 / Service1?health&NoContent返回空的html頁面。
注意:
始終限制對服務運行情況終結點的訪問是最佳作法。您可使用如下機制限制訪問:
屏幕閱讀器再也不宣佈具備摺疊或隱藏可見性的元素。若是向用戶宣佈這些元素,則包含具備摺疊或隱藏可見性的元素的用戶界面可能被屏幕閱讀器誤傳。在.NET Framework 4.8中,WPF再也不包含UIAutomation樹的Control View中的Collapsed或Hidden元素,所以屏幕閱讀器沒法再宣佈這些元素。
在.NET Framework 4.7.2中,WPF添加了在不使用adorner層的狀況下繪製TextBox和PasswordBox文本選擇的功能(參見此處)。此場景中所選文本的前景色由SystemColors.HighlightTextBrush決定。
在.NET Framework 4.8中,咱們添加了一個新屬性SelectionTextBrush,容許開發人員在使用基於非裝飾器的文本選擇時爲所選文本選擇特定畫筆。
此屬性僅適用於啓用了基於非裝飾器的文本選擇的WPF應用程序中的TextBoxBase派生控件和PasswordBox。它不適用於RichTextBox。若是未啓用基於非裝飾器的文本選擇,則會忽略此屬性。
要使用此屬性,只需將其添加到XAML代碼並使用適當的畫筆或綁定。
生成的文本選擇以下所示:
您能夠結合使用SelectionBrush和SelectionTextBrush來生成您認爲合適的背景和前景的任何顏色組合。
WPF在.NET 4.8中增長了對Per-Monitor V2 DPI感知和混合模式DPI擴展的支持。有關這些Windows概念的更多信息,請參見此處。
WPF中最新的Per監視器應用程序開發指南指出,只有純WPF應用程序能夠在高DPI WPF應用程序中無縫工做,而且不徹底支持Hosted HWND和Windows Forms控件。
.NET 4.8改進了對支持混合模式DPI擴展的平臺上的高DPI WPF應用程序中託管HWND和Windows Forms互操做的支持(Windows 10 v1803)。當託管HWND或Windows窗體控件建立爲混合模式DPI縮放窗口時(如「 混合模式DPI縮放和DPI感知API 」文檔中所述,經過調用SetThreadDpiHostingBehavior和SetThreadDpiAwarenessContext API),能夠託管此類Per-Monitor V2 WPF應用程序中的內容,並對它們進行適當調整大小和縮放。此類託管內容不會在本機DPI上呈現 - 相反,操做系統會將託管內容擴展到適當的大小。
對Per-Monitor v2 DPI感知模式的支持還容許在高DPI應用程序的本機窗口下託管(即,父級)WPF控件。Windows 10 v1607(週年記念更新)將提供Per-Monitor V2 DPI Awareness支持。當經過應用程序清單啓用Per-Monitor V2 DPI Awareness模式時,Windows添加了對child-HWND的支持以接收DPI更改通知。
WPF利用此支持來確保在本機窗口下託管的控件能夠響應DPI更改並自行更新。例如,在Windows窗體中託管的WPF控件或表現爲Per Monitor V2的Win32應用程序 - 如今可以正確響應DPI更改並自行更新。
請注意,Windows支持Windows 10 v1803上的混合模式DPI擴展,而v1607以上版本支持Per-Monitor V2。
要試用這些功能,必須啓用如下應用程序清單和AppContext標誌:
1.在您的應用程序中啓用Per-Monitor DPI:在app.manifest中打開Per-Monitor V2
2.在WPF中啓用高DPI支持:目標.NET Framework 4.6.2或更高版本
3.在app.config中設置AppContext開關
或者,在App.Config中設置AppContextSwitch Switch.System.Windows.DoNotUsePresentationDpiCapabilityTier2OrGreater = false以啓用.NET 4.8中引入的Per-Monitor V2和混合模式DPI支持。
最終App.Config中的運行時部分可能以下所示:
AppContext開關也能夠在註冊表中設置。您能夠參考AppContext類以獲取其餘文檔。
UIAutomation的ControllerFor屬性返回一個自動化元素數組,這些元素由支持該屬性的自動化元素操做。此屬性一般用於自動建議可訪問性。當自動化元素影響應用程序UI或桌面的一個或多個段時,將使用ControllerFor。不然,很難將控制操做的影響與UI元素相關聯。此功能增長了控件爲ControllerFor屬性提供值的功能。
AutomationPeer中添加了一個新的虛擬方法:
要爲ControllerFor屬性提供值,只需覆蓋此方法並返回此AutomationPeer操做的控件的AutomationPeers列表:
當前工具提示僅在用戶將鼠標光標懸停在控件上時顯示。在.NET Framework 4.8中,WPF添加了一項功能,可使工具提示在鍵盤焦點上顯示,也能夠經過鍵盤快捷鍵顯示。
要啓用此功能,應用程序須要經過AppContext開關「Switch.UseLegacyAccessibilityFeatures.3」和「Switch.UseLegacyToolTipDisplay」來定位.NET Framework 4.8或選擇加入。
示例App.config文件:
啓用後,包含工具提示的全部控件將在控件接收鍵盤焦點後開始顯示。隨着時間的推移或鍵盤焦點發生變化時,工具提示能夠被解除。用戶還能夠經過新的鍵盤快捷鍵Ctrl + Shift + F10手動關閉工具提示。一旦工具提示被解除,它能夠經過相同的鍵盤快捷方式再次顯示。
注意:Ribbon控件上的RibbonToolTips不會顯示在鍵盤焦點上 - 它們只會經過鍵盤快捷鍵顯示。
Windows 10引入了新的UIAutomation屬性SizeOfSet和PositionInSet,應用程序使用它們來描述集合中項目的數量。而後,UIAutomation客戶端應用程序(如屏幕閱讀器)能夠查詢應用程序以獲取這些屬性,並宣佈應用程序UI的準確表示。
此功能添加了對WPF應用程序的支持,以將這兩個屬性公開給UIAutomation。這能夠經過兩種方式實現:
1.DependencyProperties
新的DependencyProperties SizeOfSet和PositionInSet已添加到System.Windows.Automation.AutomationProperties命名空間。開發人員能夠經過XAML設置其值:
2.AutomationPeer虛擬方法
虛擬方法GetSizeOfSetCore和GetPositionInSetCore也已添加到AutomationPeer類中。開發人員能夠經過覆蓋這些方法爲SizeOfSet和PositionInSet提供值:
ItemsControls中的項目將自動爲這些屬性提供值,而無需開發人員的其餘操做。若是ItemsControl已分組,則組的集合將表示爲一個集合,每一個組計爲一個單獨的集合,該組中的每一個項目都提供其在該組內的位置以及該組的大小。虛擬化不會影響自動值。即便一個項目沒有實現,它仍然會計入集合的總大小,並影響它的兄弟項目集合中的位置。
僅當開發人員以.NET Framework 4.8爲目標或已將AppContext開關設置爲「Switch.UseLegacyAccessibilityFeatures.3」(例如經過App.config文件)時,纔會提供自動值:
請在.NET Framework 4.8中嘗試這些改進,並在下面的評論中或經過GitHub分享您的反饋。
謝謝!