.NET Framework 4.8發佈

来源:https://www.cnblogs.com/minotauros/archive/2019/04/19/10736607.html
-Advertisement-
Play Games

原文地址:https://devblogs.microsoft.com/dotnet/announcing-the-net-framework-4-8/ 我們很高興地宣佈今天發佈.NET Framework 4.8。它包含在Windows 10 May 2019更新中。.NET Framework ...


原文地址:https://devblogs.microsoft.com/dotnet/announcing-the-net-framework-4-8/

我們很高興地宣佈今天發佈.NET Framework 4.8。它包含在Windows 10 2019 May更新中。.NET Framework 4.8也可以在Windows 7+和Windows Server 2008 R2 +上使用。

您可以從我們的 .NET下載站點安裝.NET 4.8 要構建面向.NET Framework 4.8的應用程式,可以下載.NET 4.8開發人員包如果您只想要.NET 4.8運行時,可以嘗試:

.NET Framework 4.8包含更新的工具集以及幾個方面的改進:

  • [運行時]  JIT和NGEN改進
  • [BCL]  更新了ZLib
  • [BCL]  降低FIPS對密碼學的影響
  • [WinForms]  輔助功能增強功能
  • [WCF]  服務行為增強功能
  • [WPF]  高DPI增強,UIAutomation改進

您可以在.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 SP1

 .NET Framework 4.8中的新功能

運行時 - JIT改進

.NET 4.8中的JIT基於.NET Core 2.1。現在,.NET Framework中提供了所有錯誤修複和.NET Core 2.1中許多基於代碼生成的性能優化。

運行時 - NGEN的改進

.NET Framework中的NGEN映像不再包含可寫和可執行部分。這減少了可用於通過修改將要執行的記憶體來執行任意代碼的攻擊的錶面區域。

雖然在運行時記憶體中仍然存在可寫和可執行數據,但此更改會刪除從NGEN映像映射的數據,從而允許它們在不允許圖像中的可執行/可寫部分的受限環境中運行。

運行時 - 所有程式集的反惡意軟體掃描

在以前版本的.NET Framework中,Windows Defender或第三方反惡意軟體會自動掃描從磁碟載入的所有程式集以查找惡意軟體。但是,從其他地方載入的程式集(例如使用Assembly.Load(byte []))將不會被掃描,並且可能會檢測到未檢測到的病毒。

Windows 10上的.NET Framework 4.8會觸發Windows Defender和許多其他實現反惡意軟體掃描介面的反惡意軟體解決方案對這些程式集的掃描我們希望這會使惡意軟體更難以在.NET程式中偽裝自己。

BCL - 更新了ZLib

從.NET Framework 4.5開始,我們使用 clrcompression.dll中http://zlib.net的ZLib本機版本(用於數據壓縮的本機外部壓縮庫)  ,以便為deflate演算法提供實現。在.NET Framework 4.8中,我們將clrcompression.dll更新為使用版本1.2.11,其中包括幾個關鍵的改進和修複

BCL - 降低FIPS對密碼學的影響

.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”來返回到先前的行為。

Windows窗體 - 輔助功能增強功能

在.NET Framework 4.8中,WinForms添加了三個新功能,使開發人員能夠編寫更易於訪問的應用程式。添加的功能旨在使視障用戶的應用程式數據通信更加健壯。當用戶通過鍵盤導航時,我們添加了對ToolTips的支持,我們已將LiveRegions和Notification Events添加到許多常用控制項中。

要啟用這些功能,您的應用程式需要在App.config文件中啟用以下AppContextSwitches:

Windows窗體 - UIA LiveRegions支持標簽和StatusStrips

UIA Live Regions允許應用程式開發人員通知屏幕閱讀器控制項的文本更改,該控制項位於用戶工作的位置之外。這將派上用場的示例可以是顯示連接狀態的StatusStrip。如果刪除連接並且狀態發生更改,開發人員可能希望通知屏幕閱讀器此更改。Windows Forms已為Label控制項和StatusStrip控制項實現了UIA LiveRegions。

在Label控制項中使用LiveRegion的示例:

講述者現在將宣佈“準備就緒”,無論用戶在何處與應用程式進行交互。
您還可以將UserControl實現為Live區域:

Windows窗體 - UIA通知事件

在Windows 10 Fall Creators Update中,Windows引入了一種新方法,讓應用程式通知Narrator內容已更改,而Narrator應該宣佈更改。UIA通知事件為您的應用程式提供了一種方式來引發UIA事件,這會導致講述人根據您為事件提供的文本簡單地發佈通知,而無需在UI中使用相應的控制項。在某些情況下,這可能是一種直接提高應用程式可訪問性的方法。有關UIA通知事件的更多信息,請參閱此博客文章

通知可能派上用場的一個示例是通知可能需要一些時間的某個過程的進度。

提升通知事件的示例:

Windows窗體 - 鍵盤訪問的工具提示

目前,只能通過將滑鼠指針移動到控制項中來觸發控制工具提示。此新功能使鍵盤用戶可以通過使用Tab鍵或帶有或不帶修飾鍵的箭頭鍵來聚焦控制項來觸發控制項的工具提示。此特定輔助功能增強需要額外的AppContextSwitch,如以下示例所示:

  1.創建一個新的WinForms應用程式。

  2.將以下XML添加到App.config文件中。

  3.將幾個按鈕和一個ToolTip控制項添加到應用程式的表單中。

  4.設置按鈕的工具提示。

  5.運行應用程式並使用鍵盤在按鈕之間導航:

Windows窗體 - DataGridView控制可訪問的層次結構更改

目前,可訪問的層次結構(UI自動化樹)將編輯框樹元素顯示為當前編輯的單元格的子元素,但不顯示為DataGridView的根子元素。可以使用Inspect工具觀察層次結構樹更新:

 WCF - ServiceHealthBehavior

健康端點具有許多優點,並且編排工具廣泛使用它來根據服務健康狀況管理服務。監控工具還可以使用運行狀況檢查來跟蹤和警告服務的可用性和性能,並將其作為早期問題指標。

ServiceHealthBehavior是一種擴展IServiceBehavior的WCF服務行為。添加到ServiceDescription.Behaviors集合後,它將啟用以下內容:

  • 使用HTTP響應代碼返回服務運行狀況:可以在查詢字元串中指定HTTP / GET運行狀況探測請求的HTTP狀態代碼。
  • 發佈服務運行狀況:使用“?運行狀況”查詢字元串,使用HTTP / GET請求顯示服務特定的詳細信息,包括服務狀態和節流計數和容量。在故障排除錯誤行為的WCF服務時,瞭解並輕鬆訪問所顯示的信息非常重要。

配置ServiceHealthBehavior:

有兩種方法可以公開運行狀況端點併發布WCF服務運行狀況信息:使用代碼或使用配置文件。

  1. 使用代碼啟用運行狀況端點 
  1. 使用config啟用健康端點

使用HTTP響應代碼返回服務運行狀況:

可以通過查詢參數(OnServiceFailure,OnDispatcherFailure,OnListenerFailure,OnThrottlePercentExceeded)查詢運行狀況。可以為每個查詢參數指定HTTP響應代碼(200 - 599)。如果省略查詢參數的HTTP響應代碼,則預設使用503 HTTP響應代碼。

查詢參數和示例:

  1. OnServiceFailure
  • 示例:通過查詢https:// contoso:81 / Service1?health&OnServiceFailure = 450,當ServiceHost.State大於CommunicationState.Opened時,將返回450 HTTP響應狀態代碼。
  1. OnDispatcherFailure
  • 示例:通過查詢https:// contoso:81 / Service1?health&OnDispatcherFailure = 45 5,當任何通道調度程式的狀態大於CommunicationState.Opened時,將返回455 HTTP響應狀態代碼。
  1. OnListenerFailure
  • 示例:通過查詢https:// contoso:81 / Service1?health&OnListenerFailure = 4 65,當任何通道偵聽器的狀態大於CommunicationState.Opened時,將返回465 HTTP響應狀態代碼。
  1. OnThrottlePercentExceeded:指定觸發響應的百分比{1 - 100}及其HTTP響應代碼{200 - 599}。
  • 示例:通過查詢https:// contoso:81 / Service1?health&OnThrottlePercentExceeded = 70:350,95:500,當節流百分比等於或大於95%時,返回500響應代碼; 當百分比等於或大於70%且小於95%時,返回350; 否則,返回200。

出版服務健康狀況:

啟用運行狀況端點後,可以在html中顯示服務運行狀況(通過指定查詢字元串:https:// contoso:81 / Service1?運行狀況)或xml(通過指定查詢字元串:https:// contoso: 81 / Service1?health&Xml)格式。https:// contoso:81 / Service1?health&NoContent返回空的html頁面。

註意:

始終限制對服務運行狀況終結點的訪問是最佳做法。您可以使用以下機制限制訪問:

  1. 為健康端點使用不同於其他服務的埠,並使用防火牆規則來控制訪問。
  2. 將所需的身份驗證和授權添加到運行狀況端點綁定。

WPF - 屏幕旁白者不再宣佈具有摺疊或隱藏可見性的元素

屏幕閱讀器不再宣佈具有摺疊或隱藏可見性的元素。如果向用戶宣佈這些元素,則包含具有摺疊或隱藏可見性的元素的用戶界面可能被屏幕閱讀器誤傳。在.NET Framework 4.8中,WPF不再包含UIAutomation樹的Control View中的Collapsed或Hidden元素,因此屏幕閱讀器無法再宣佈這些元素。

WPF - SelectionTextBrush屬性,用於非基於Adorner的文本選擇

在.NET Framework 4.7.2中,WPF添加了在不使用adorner層的情況下繪製TextBox和PasswordBox文本選擇的功能(參見此處)。此場景中所選文本的前景色由SystemColors.HighlightTextBrush決定

在.NET Framework 4.8中,我們添加了一個新屬性SelectionTextBrush,允許開發人員在使用基於非裝飾器的文本選擇時為所選文本選擇特定畫筆。

此屬性僅適用於啟用了基於非裝飾器的文本選擇的WPF應用程式中的TextBoxBase派生控制項和PasswordBox。它不適用於RichTextBox。如果未啟用基於非裝飾器的文本選擇,則會忽略此屬性。

要使用此屬性,只需將其添加到XAML代碼並使用適當的畫筆或綁定。

生成的文本選擇如下所示:

您可以結合使用SelectionBrush和SelectionTextBrush來生成您認為合適的背景和前景的任何顏色組合。

WPF - 高DPI增強功能

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類以獲取其他文檔。

WPF - 支持UIAutomation ControllerFor屬性

UIAutomation的ControllerFor屬性返回一個自動化元素數組,這些元素由支持該屬性的自動化元素操作。此屬性通常用於自動建議可訪問性。當自動化元素影響應用程式UI或桌面的一個或多個段時,將使用ControllerFor。否則,很難將控制操作的影響與UI元素相關聯。此功能增加了控制項為ControllerFor屬性提供值的功能。

AutomationPeer中添加了一個新的虛擬方法:

要為ControllerFor屬性提供值,只需覆蓋此方法並返回此AutomationPeer操作的控制項的AutomationPeers列表:

WPF - 鍵盤訪問的工具提示

當前工具提示僅在用戶將滑鼠游標懸停在控制項上時顯示。在.NET Framework 4.8中,WPF添加了一項功能,可以使工具提示在鍵盤焦點上顯示,也可以通過鍵盤快捷鍵顯示。

要啟用此功能,應用程式需要通過AppContext開關“Switch.UseLegacyAccessibilityFeatures.3”和“Switch.UseLegacyToolTipDisplay”來定位.NET Framework 4.8或選擇加入。

示例App.config文件:

啟用後,包含工具提示的所有控制項將在控制項接收鍵盤焦點後開始顯示。隨著時間的推移或鍵盤焦點發生變化時,工具提示可以被解除。用戶還可以通過新的鍵盤快捷鍵Ctrl + Shift + F10手動關閉工具提示。一旦工具提示被解除,它可以通過相同的鍵盤快捷方式再次顯示。

註意:Ribbon控制項上的RibbonToolTips不會顯示在鍵盤焦點上 - 它們只會通過鍵盤快捷鍵顯示。

WPF - 添加了對SizeOfSet和PositionInSet UIAutomation屬性的支持

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分享您的反饋

謝謝!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 關於C的一些小而精的編程,適合希望提升編程能力的初學者學習:關鍵編程也就幾句,但思維可以遷移到其他編程語言。同一問題,演算法多種 //階乘運算(有多種編寫方式,編程需要看懂,更要打出來)#include<stdio.h>main(){ int x; float y=1; int i=2; scanf( ...
  • 1.什麼是類 類是具有相同屬性的一批對象的抽象化。 1.1屬性 類或者是對象具有的特征稱為屬性。 同一類的對象具有相同屬性,但都具有各自的屬性值,因此每一個對象都是一個獨立的個體。 1.2方法(Method) 類或者對象的行為稱為方法 2.如何定義類和對象 2.1定義一個類 一個類中可以存在多個屬性 ...
  • 配置環境變數 右鍵單擊“此電腦->屬性->高級系統設置->環境變數” 在“系統變數”欄下單擊“新建” 2. 在“系統變數”欄里找到Path,選中後單擊編輯 然後單擊新建,填入%JAVA_HOME%\bin 再新建,填入%JAVA_HOME%\jre\bin 3.新建->變數名:CLASSPATH 變 ...
  • 一:普通裝飾器 概念:在不改變原函數內部代碼的基礎上,在函數執行之前和之後自動執行某個功能,為已存在的對象添加某個功能 關於返回值 def base(func): def inner(*args,**kwargs): data = func(*args,**kwargs) return data r ...
  • 伺服器代碼: using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.IO;using System.L ...
  • asp.net core重新載入應用配置 Intro 我把配置放在了資料庫或者是Redis里,配置需要修改的時候我要直接修改資料庫,然後調用一個介面去重新載入應用配置,於是就嘗試寫一個運行時重新載入配置的介面。 Configuration 重新載入實現 重新載入配置的介面其實很簡單,經過看 的源碼可 ...
  • 在OnOpen事件內,通過 ...
  • EXE或者DLL寫好了,要開始寫函數說明文檔了,可是有時裡面的函數太多,怎麼能自動列出來呢?在DSAPI中提供了該功能(目前沒有做參數類型導出,以後有時間會添加)。 先準備一個已經寫好的EXE或DLL,註意,EXE或DLL必須是.NET編寫的,EXE不能加殼,兩者均可以是經混淆處理過的。 如 調用函 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...