百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

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

ccwgpt 2024-09-23 04:28 40 浏览 0 评论

在本文中,我们将回顾一些未能进入.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 中,该方法终被标记为已过时。

原文链接:

.NET 5 Breaking Changes: Historic Technologies

延伸阅读:

微软发布.NET 5.0 RC1,未来将只有一个.NET-InfoQ

关注我并转发此篇文章,私信我“领取资料”,即可免费获得InfoQ价值4999元迷你书,点击文末「了解更多」,即可移步InfoQ官网,获取最新资讯~

相关推荐

如何使用PIL生成验证码?(pi验证教程)

web项目中遇到使用验证码的情况有很多,进行介绍下使用PIL生成验证码的方法。安装开始安装PIL的过程确实麻烦各种问题层出不绝,不过不断深入后就没有这方面的困扰了:windows安装:直接安装Pil...

Python必学!3步解锁asyncio异步编程 性能直接狂飙10倍!

还在用传统同步代码被IO阻塞卡到崩溃?别当“代码苦行僧”了!Python的asyncio模块堪称异步编程的“开挂神器”,处理高并发任务就像开了涡轮增压!不管是网络爬虫、API接口开发还是文件批量处理,...

Tornado6+APScheduler/Celery打造并发异步动态定时任务轮询服务

定时任务的典型落地场景在各行业中都很普遍,比如支付系统中,支付过程中因为网络或者其他因素导致出现掉单、卡单的情况,账单变成了“单边账”,这种情况对于支付用户来说,毫无疑问是灾难级别的体验,明明自己付了...

Python学习怎么入门?附真实学习方法

Python技术在企业中应用的越来越广泛,因此企业对于Python方面专业人才的需求也越来越大,那对于之前对Python没有任何了解和接触的人而言,想要从零开始学习并不是一件容易的事情,接下来小U就为...

PySpider框架的使用(pyspider 教程)

PysiderPysider是一个国人用Python编写的、带有强大的WebUI的网络爬虫系统,它支持多种数据库、任务监控、项目管理、结果查看、URL去重等强大的功能。安装pip3inst...

大学计算机专业 学习Python学习路线图(最新版)

这是我刚开始学习python时的一套学习路线,从入门到上手。(不敢说精通,哈哈~)希望对大家有帮助哈~大家需要高清得完整python学习路线可以【文末有获取方式】【文末有获取方式】一、Python入门...

阿里巴巴打造的400集Python视频合集免费学起来,学完万物皆可爬

第一阶段Python入门章节1:Python入门章节2:编程基本概念章节3:序列章节4:控制语句章节5:函数章节6:面向对象编程第二阶段Python深入与提高章节1:异常处理章节2:游戏开发-坦克大...

Nginx Gunicorn在服务器中分别起什么作用

大部分人在gunicorn前面部署一层nginx的时候也的确没有想过为什么,他们只是觉得这样显得他们比较专业,而且幻想着加了一层nginx反向代理之后性能会有提升,恕我直言,请你们带上脑子,一个单纯的...

Python培训怎么学?Python基础技术总结!值得一看

Python培训如今越来越被更多人所接受,相比自学参加Python培训的好处也是显而易见,但Python毕竟属于后端编程开发的主流语言,其知识机构还是比较庞大的,那Python培训怎么学?以及Pyth...

使用Tornado部署Flask项目(tornado async)

Tornado不仅仅是一个WEB框架,也可以是一个WEB服务器。在Tornado中我们可以使用wsgi模块下的WSGIContainer类运行其他WSGI应用如:Fask,Bottle,Djang...

Python Web框架哪个好用?(python3 web框架)

  问:PythonWeb框架哪个好用?  答:  1.Django  Django是Python世界中最出名、最成熟的Web框架。Django功能全面,各模块之间结合紧密,(不讲其他的)Djang...

Vue3.0+Tornado6.1发布订阅模式打造异步非阻塞实时=通信聊天系统

“表达欲”是人类成长史上的强大“源动力”,恩格斯早就直截了当地指出,处在蒙昧时代即低级阶段的人类,“以果实、坚果、根作为食物;音节清晰的语言的产生是这一时期的主要成就”。而在网络时代人们的表达欲往往更...

Python开源项目合集(第三方平台)(python第三方开发工具)

wechat-python-sdk-wechat-python-sdk微信公众平台Python开发包http://wechat-python-sdk.readthedocs.org/,非官方...

IT界10倍高效学习法!用这种方式,一年学完清华大学四年的课程

有没有在某一个瞬间,让你放弃学编程刚开始学python时,我找了几十本国内外的python编程书籍学习后,我还是似懂非懂,那些书里面到处都是抽象的概念,复杂的逻辑,这样的书,对于专业开发者来说,在平常...

如何将Python算法模型注册成Spark UDF函数实现全景模型部署

背景Background对于算法业务团队来说,将训练好的模型部署成服务的业务场景是非常常见的。通常会应用于三个场景:部署到流式程序里,比如风控需要通过流式处理来实时监控。部署到批任务中部署成API服...

取消回复欢迎 发表评论: