.NET 5 的重大改变:消失的历史技术

在本文中,我们将回顾一些未能进入.NET Core 的历史性.NET 技术。有趣之处在于,这些技术的 API 被复制过来了,这暗示着微软当时在考虑将来在.NET Core 中对它们进行实现。

全局程序集缓存

全局程序集缓存(GAC)背后的理论是,所有.NET 库都可以存储在单个集中的位置。在这种方式下,它与COM库类似。但与 COM 不同的是,它可以存储每个库的多个版本。通过这种方式,微软希望可以避免困扰 90 年代应用程序的“DLL 地狱”情景。

但是,版本问题仍然存在。此外,获得代码签名证书的需要以及 Windows Vista 带来的安全性的增加使得 GAC 成为一项令人讨厌的技术。到.NET 4.5 发布时,几乎没有应用程序将 GAC 用于非微软库。主要的例外是商业库,但即使是这些库也已经转向了对 NuGet 更友好的交付模型。

因此,也就不奇怪,微软在.NET Core 中从根本上改变了他们的哲学。在新模型中,所有库依赖项都与应用程序一起部署,从而使得应用程序可以与其他.NET Core 应用程序隔离开来。因此,.NET Core 中没有 GAC 的概念。

尽管如此,GAC API 在.NET Core 中仍然存在。它们所做的事情不多,例如,指示程序集是否在 GAC 中的属性被硬编码为返回 false。

为了进一步明确意图,所有的 GAC API 现在都被标记为已过时,微软正考虑在未来的版本中删除它们。

Remoting

.NET Remoting是受DCOM和Java Remoting(Java RMI)的启发。这三种方法的基本思想都是一个应用程序可以使用代理对象来操作在另一个应用程序中运行的真实对象。虽然它在技术上可以工作,但.NET Remoting 从来就没有流行过,因为要正确地使用它很难,而且人们一般认为它很脆弱。

考虑到这一点,.NET Core 从未实现过.NET Remoting API。就像 GAC API 一样,它只有不可操作的占位符。因此,它们也被标记为已过时,而最终目的是将其删除。

代码访问安全

继续这个主题,代码访问安全(CAS)是另一种 API 被复制到.NET Core 中,但被标记为已过时的.NET Framework 技术。

代码访问安全创建于 Docker 等隔离容器之前。在.NET Framework 时代,多个应用程序会托管在单个 Internet Information Server(IIS)实例中。理论上,每个应用程序都将被隔离到一个单独的应用程序域中,但要打破这种隔离并干扰在 IIS 中运行的其他应用程序并不难。

代码访问安全的创建就是为了限制这种可能的损害。其基本思想是,危险的 API 会被加上表示风险的属性。IIS 之类的主机可以配置为运行具有不同“信任”级别的应用程序,从理论上讲,是将它们放入一个沙箱中。

CAS 的另一个用途是用于浏览器托管的应用程序。早在 Silverlight 出现之前,就已经可以在 Internet Explorer 中运行 Windows 窗体应用程序了。应用程序的信任级别部分取决于它是从哪里加载的,内部站点会获得更高的权限。

但是和许多早期的.NET 技术一样,要正确地实现 CAS 很困难。恶意应用程序有许多方法可以绕过 CAS 限制,而良性应用程序却常常为这些限制所限。结果,浏览器托管的应用程序很快就把它禁用了,而 IIS 在很大程度上忽略了 CAS 信任级别。

Thread.Abort

这可能会令你感到惊讶。Thread.Abort在.NET Core 中从未实现过。虽然它总是被认为有危险,但总也不可避免。在 ASP.NET 中,像请求超时或客户端断开连接这样简单的事情就会触发一个Thread.Abort调用。如果你没有认真地编写代码进行处理,这可能会导致资源泄漏,比如获取的锁或打开的数据库事务。

到 ASP.NET Core 被创建时,CancellationToken已成为一个安全且被广泛接受的Thread.Abort替代者,因此就不需要在.NET Core 的第一个版本中实现它了。尽管.NET Core 已经将其功能扩展到 Web 站点之外,但其他主要的应用程序框架都不需要Thread.Abort,因此它会继续抛出PlatformNotSupportedException

在.NET 5 中,该方法终被标记为已过时。

原文链接:https://www.infoq.cn/article/5McxpFwRxeKGeiBfTKPy

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/306365.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器学习——决策树学习

机器学习——决策树学习一、什么是决策树二、决策树的学习过程特征选择:决策树生成:剪枝:三、决策树的一个具体的实例导入数据python strip() 函数和 split() 函数的详解及实例数据处理提取到训练集中的标签给数据的每一列添加上标签&#xf…

微软:Excel公式是世界上使用最广泛的编程语言

喜欢就关注我们吧!文|一君微软近日推出了一项 Excel 公式构建的新功能 LAMBDA,正则测试阶段。LAMBDA 允许使用 Excel 自身的公式语言自定义功能,而过去,Excel 中需要通过 JS 等语言编写自定义函数。同时,LAMBDA 还可以…

tcp unity 图片_用 Unity 做个游戏(七) - TCP Socket 客户端

前言这真的是最后一篇有关基础框架的文章了!写到这里已经第七篇了orz之前的其实还是挺枯燥的,都是些基础方面的东西,并看不到什么有趣的内容可能是我把事情想的太复杂了吧,所有东西都想做到能力范围内的最好,尤其是这些…

机器学习——文件的读取

机器学习——文件的读取(一).txt文件的读取(二)excel文件读取操作(一).txt文件的读取 txt的链接 链接:https://pan.baidu.com/s/1fIAUdCDTpR7TiqLHZtx1yg 提取码:0929 python strip() 函数和 split() 函数的详解及实例 一直以来都分不清楚strip和split…

理解C#中的闭包

1、 闭包的含义首先闭包并不是针对某一特定语言的概念,而是一个通用的概念。除了在各个支持函数式编程的语言中,我们会接触到它。一些不支持函数式编程的语言中也能支持闭包(如java8之前的匿名内部类)。在看过的对于闭包的定义中&…

linux select读取节点数据失败_MySQL中覆盖索引查询和select*查询执行结果案例分析...

索引优化建议在MySQL中要尽可能使用覆盖索引进行检索,只访问索引的查询(索引列和查询列一致),减少select * 可提高查询效率覆盖索引(Covering Index)理解方式一:就是select的数据列只用从索引中就能够取得,不必读取数据行,MySQL可…

机器学习之乳腺癌预测

机器学习之乳腺癌预测 (一)问题分析1.问题背景2.问题分析3.题目所需的代码及数据(二).导入数据1. 认识数据集2.导入数据3.数据概述(三)EDA 数据探索性分析1.描述性统计分析A.查看数据维度(行列数)B.数据统计描述(列名对应的信息)C.查看数据信息(统计学信息)D.缺失处理2.数据可视…

使用 Azure WAF 羞辱黑客的智商

点击上方蓝字关注“汪宇杰博客”导语还记得之前给大家介绍过的《使用 Azure Web 应用防火墙拦截黑客攻击》吗?今天我又带来了一个有趣的 Azure WAF 小技巧,可以让你爽一把。好奇的黑客今天 Azure Application Insights 上发现了一段集中时间的404错误&am…

实现option上下移动_用jQuery实现lt;selectgt;选项上下移动 - 不要哀求 学会争取 若是如此 终有所获 - ITeye博客...

嘖嘖嘖,短短兩個API串接: $opt.next().after($opt)就做出了向下移動的效果。記得以往用純Javascript寫,還得判斷是否為最後一個,若是就不能下移;然後上下位置交換得用options[index]搞半天。不得不要再次讚嘆jQuery的神奇!$(funct…

机器学习之乳腺癌问题(SVM)

机器学习之乳腺癌问题SVM题目所需的代码及数据利用SVM建模SVM调参题目所需的代码及数据 链接:https://pan.baidu.com/s/1bS7Ku_PUfcimiVkmLz9Fzw 提取码:0929 利用SVM建模 import matplotlib.pyplot as plt import pandas as pd import numpy as npfro…

数据科学与python语言实验——NumPy数值计算基础

NumPy数值计算基础实验数据: 链接:https://pan.baidu.com/s/1-E2ShVTdI0X5lwDtMLFFsQ 提取码:0929 代码实现: 之前不会的地方: 1.读取文件 使用numpy内置的loadtxt()函数以及这个函数的参数frame&#x…

如何将日志记录到 Windows事件日志 中

每当出现一些未捕获异常时,操作系统都会将异常信息写入到 Windows 事件日志 中,可以通过 Windows 事件查看器 查看,如下图:这篇文章将会讨论如何使用编程的方式将日志记录到 Windows 事件日志 中。安装 EventLog 要想在 .NET Core…

linux磁盘写保护怎么修改_mount: /dev/vdb 写保护,将以只读方式挂载

今天再mount磁盘的时候遇到一个问题:[rootoracle1 /]# mount /dev/vdb /oradatamount: /dev/vdb 写保护,将以只读方式挂载mount: 未知的文件系统类型“(null)”这个问题重新格式化磁盘后就好了mkfs.ext4 /dev/vdb让这个盘在系统启动的时候自动挂载[oracl…

【Java】springboot

文章目录 Spingboot1、起步依赖2、构建springboot工程jar包3、springboot配置文件4、多环境配置5、maven和boot多环境兼容问题6、配置文件分类7、springboot整合mybatis Spingboot springboot用来简化spring的初始搭建以及开发过程。 比方说,创建一个springmvc程序…

数据科学与python语言——Matplotlib数据可视化基础

Matplotlib数据可视化基础一.读取数据与数据处理阶段1.提取指定行中的数据2.得到>指定数值的数据3.得到指定值得数据4.整体的数据处理:二.画图函数1.plt.subplots()2.plt.subplots_adjust()3.设置x轴y轴的刻度和标签4.使用中文标题在作图时三.画折线图(plot)四.画…

2021年,Azure云遇到. NET5,注定开启高光时刻,微软的心,真大!

云开发诞生的市场背景云开发是一个已经存在了很多年的概念,但在过去未能真正成为主流。然而,由于云和软件即服务的宏观趋势的结合,以及技术的进步,如容器技术 Docker 和 Kubernetes,云开发现在有机会最终成为基于云的应…

fpga开发教程 labview_LabVIEW项目样例 - NI VST FPGA软件编程使用步骤与实例教程

3. LabVIEW项目样例NI VST仪器设计库的能力强大,但是并不能单枪匹马地完全满足软件设计仪器实现默认功能的要求,也不能提供大多数VSA和VSG仪器编程人员所熟悉的简单主机接口。LabVIEW 2012提供了一个新功能,这种方便的机制不仅能够分配附加代…

.net5+nacos+ocelot 配置中心和服务发现实现

相关文章:手动造轮子——为Ocelot集成Nacos注册中心出处:https://www.cnblogs.com/buruainiaaaa/p/14121176.html作者:唐 最近一段时间 因公司业务需要,需要使用.net5做一套微服务的接口,使用nacos 做注册中心和配置中…

数据科学与python语言——Pandas统计分析基础(时间转换+聚合)

Pandas统计分析基础(时间转换聚合)实验要求一实验二要求全部代码实验要求一 #M表的时间戳类型转为datetime data_Mete[TIMESTAMP]pd.to_datetime(data_Mete[TIMESTAMP],format%Y%m%d%H%M%S)data_VI[Date]pd.to_datetime(data_VI[Date],format%Y/%m/%d) p…

用keil怎么擦除_分享STM32 FLASH 擦除(以及防止误擦除程序代码)、写入

编译环境:我用的是(Keil)MDK4.7.2stm32库版本:我用的是3.5.0一、本文不对FLASH的基础知识做详细的介绍,不懂得地方请查阅有关资料。对STM32 内部FLASH进行编程操作,需要遵循以下流程:FLASH解锁清除相关标志位擦除FLASH…