.NET Framework 4.8 发布 JIT 和 NGEN 改进

432次阅读  |  发布于5年以前

具体说明如下:

.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集合后,它将启用以下内容:

配置ServiceHealthBehavior:

有两种方法可以公开运行状况端点并发布WCF服务运行状况信息:使用代码或使用配置文件。

  1. 使用代码启用运行状况端点

  2. 使用config启用健康端点

使用HTTP响应代码返回服务运行状况:

可以通过查询参数(OnServiceFailure,OnDispatcherFailure,OnListenerFailure,OnThrottlePercentExceeded)查询运行状况。可以为每个查询参数指定HTTP响应代码(200 - 599)。如果省略查询参数的HTTP响应代码,则默认使用503 HTTP响应代码。

查询参数和示例:

  1. OnServiceFailure:
  1. OnDispatcherFailure:
  1. OnListenerFailure:
  1. OnThrottlePercentExceeded:指定触发响应的百分比{1 - 100}及其HTTP响应代码{200 - 599}。

出版服务健康状况:

启用运行状况端点后,可以在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文件)时,才会提供自动值。

支持的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

更新说明出处

下载地址:

https://dotnet.microsoft.com/download/dotnet-framework

推荐文章

刘强东夫妇:“移民美国”传言被驳斥

京东创始人刘强东和其妻子章泽天最近成为了互联网舆论关注的焦点。有关他们“移民美国”和在美国购买豪宅的传言在互联网上广泛传播。然而,京东官方通过微博发言人发布的消息澄清了这些传言,称这些言论纯属虚假信息和蓄意捏造。

博主曝三大运营商,将集体采购百万台华为Mate60系列

日前,据博主“@超能数码君老周”爆料,国内三大运营商中国移动、中国电信和中国联通预计将集体采购百万台规模的华为Mate60系列手机。

ASML CEO警告:出口管制不是可行做法,不要“逼迫中国大陆创新”

据报道,荷兰半导体设备公司ASML正看到美国对华遏制政策的负面影响。阿斯麦(ASML)CEO彼得·温宁克在一档电视节目中分享了他对中国大陆问题以及该公司面临的出口管制和保护主义的看法。彼得曾在多个场合表达了他对出口管制以及中荷经济关系的担忧。

抖音中长视频App青桃更名抖音精选,字节再发力对抗B站

今年早些时候,抖音悄然上线了一款名为“青桃”的 App,Slogan 为“看见你的热爱”,根据应用介绍可知,“青桃”是一个属于年轻人的兴趣知识视频平台,由抖音官方出品的中长视频关联版本,整体风格有些类似B站。

威马CDO:中国每百户家庭仅17户有车

日前,威马汽车首席数据官梅松林转发了一份“世界各国地区拥车率排行榜”,同时,他发文表示:中国汽车普及率低于非洲国家尼日利亚,每百户家庭仅17户有车。意大利世界排名第一,每十户中九户有车。

研究发现维生素 C 等抗氧化剂会刺激癌症生长和转移

近日,一项新的研究发现,维生素 C 和 E 等抗氧化剂会激活一种机制,刺激癌症肿瘤中新血管的生长,帮助它们生长和扩散。

苹果据称正引入3D打印技术,用以生产智能手表的钢质底盘

据媒体援引消息人士报道,苹果公司正在测试使用3D打印技术来生产其智能手表的钢质底盘。消息传出后,3D系统一度大涨超10%,不过截至周三收盘,该股涨幅回落至2%以内。

千万级抖音网红秀才账号被封禁

9月2日,坐拥千万粉丝的网红主播“秀才”账号被封禁,在社交媒体平台上引发热议。平台相关负责人表示,“秀才”账号违反平台相关规定,已封禁。据知情人士透露,秀才近期被举报存在违法行为,这可能是他被封禁的部分原因。据悉,“秀才”年龄39岁,是安徽省亳州市蒙城县人,抖音网红,粉丝数量超1200万。他曾被称为“中老年...

亚马逊股东起诉公司和贝索斯,称其在购买卫星发射服务时忽视了 SpaceX

9月3日消息,亚马逊的一些股东,包括持有该公司股票的一家养老基金,日前对亚马逊、其创始人贝索斯和其董事会提起诉讼,指控他们在为 Project Kuiper 卫星星座项目购买发射服务时“违反了信义义务”。

苹果上线AppsbyApple网站,以推广自家应用程序

据消息,为推广自家应用,苹果现推出了一个名为“Apps by Apple”的网站,展示了苹果为旗下产品(如 iPhone、iPad、Apple Watch、Mac 和 Apple TV)开发的各种应用程序。

特斯拉美国降价引发投资者不满:“这是短期麻醉剂”

特斯拉本周在美国大幅下调Model S和X售价,引发了该公司一些最坚定支持者的不满。知名特斯拉多头、未来基金(Future Fund)管理合伙人加里·布莱克发帖称,降价是一种“短期麻醉剂”,会让潜在客户等待进一步降价。

光刻机巨头阿斯麦:拿到许可,继续对华出口

据外媒9月2日报道,荷兰半导体设备制造商阿斯麦称,尽管荷兰政府颁布的半导体设备出口管制新规9月正式生效,但该公司已获得在2023年底以前向中国运送受限制芯片制造机器的许可。

马斯克与库克首次隔空合作:为苹果提供卫星服务

近日,根据美国证券交易委员会的文件显示,苹果卫星服务提供商 Globalstar 近期向马斯克旗下的 SpaceX 支付 6400 万美元(约 4.65 亿元人民币)。用于在 2023-2025 年期间,发射卫星,进一步扩展苹果 iPhone 系列的 SOS 卫星服务。

𝕏(推特)调整隐私政策,可拿用户发布的信息训练 AI 模型

据报道,马斯克旗下社交平台𝕏(推特)日前调整了隐私政策,允许 𝕏 使用用户发布的信息来训练其人工智能(AI)模型。新的隐私政策将于 9 月 29 日生效。新政策规定,𝕏可能会使用所收集到的平台信息和公开可用的信息,来帮助训练 𝕏 的机器学习或人工智能模型。

荣耀CEO谈华为手机回归:替老同事们高兴,对行业也是好事

9月2日,荣耀CEO赵明在采访中谈及华为手机回归时表示,替老同事们高兴,觉得手机行业,由于华为的回归,让竞争充满了更多的可能性和更多的魅力,对行业来说也是件好事。

AI操控无人机能力超越人类冠军

《自然》30日发表的一篇论文报道了一个名为Swift的人工智能(AI)系统,该系统驾驶无人机的能力可在真实世界中一对一冠军赛里战胜人类对手。

AI生成的蘑菇科普书存在可致命错误

近日,非营利组织纽约真菌学会(NYMS)发出警告,表示亚马逊为代表的电商平台上,充斥着各种AI生成的蘑菇觅食科普书籍,其中存在诸多错误。

社交媒体平台𝕏计划收集用户生物识别数据与工作教育经历

社交媒体平台𝕏(原推特)新隐私政策提到:“在您同意的情况下,我们可能出于安全、安保和身份识别目的收集和使用您的生物识别信息。”

国产扫地机器人热销欧洲,国产割草机器人抢占欧洲草坪

2023年德国柏林消费电子展上,各大企业都带来了最新的理念和产品,而高端化、本土化的中国产品正在不断吸引欧洲等国际市场的目光。

罗永浩吐槽iPhone15和14不会有区别,除了序列号变了

罗永浩日前在直播中吐槽苹果即将推出的 iPhone 新品,具体内容为:“以我对我‘子公司’的了解,我认为 iPhone 15 跟 iPhone 14 不会有什么区别的,除了序(列)号变了,这个‘不要脸’的东西,这个‘臭厨子’。

Copyright© 2013-2020

All Rights Reserved 京ICP备2023019179号-8