AI时代已来,你准备好应对挑战了吗? 了解详情
写点什么

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

  • 2020-12-10
  • 本文字数:1511 字

    阅读完需:约 5 分钟

.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是受DCOMJava 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


2020-12-10 16:059541

评论

发布
暂无评论
发现更多内容

MobTech ShareSDK 使用简介

MobTech袤博科技

开发者 sdk MobTech袤博科技

一篇文章让你重学HTTP!

Albert Edison

https 计算机网络 HTTP 8月月更

为什么我们需要关注基于 EIP-3664 标准的可拆分,可组合的NFT?

股市老人

Redis 基础

武师叔

8月月更

SRv6在SFC中的应用

穿过生命散发芬芳

8月月更 SRv6

数据结构——队列

工程师日月

8月月更

新零售标杆 SKG 全面拥抱 Serverless,实现敏捷交付

阿里巴巴云原生

阿里云 Serverless 云原生 合作案例

场景品牌易观千帆,助力数智化需求持续升级

易观分析

数字经济 数智化

开源一夏 | AngularJS对于SQL的操作心得以及DOM的研究

恒山其若陋兮

开源 8月月更

《Effective Java》第9条:try-with-resources优先于try-finally

okokabcd

Java

RocketMQ顺序消息之消息消费

急需上岸的小谢

8月月更

动手实操,让你的 Kubernetes 集群弹起来!

以尘

弹性 ACK Kubernetes 集群 ClusterAutoscaler Erda

ASP.NET Core SignalR概述

辣么大

.net SignalR 8月月更

高效能团队的Java研发规范(进阶版)

木小风

编程规范 Java core

开源一夏 | 腾讯云对象存储cos获取图片像素信息

六月的雨在InfoQ

腾讯云 开源 COS 8月月更

鸿蒙设备开发之从0到1联网上云-概述篇

愚公搬代码

签约计划第三季

离线渲染与实时渲染杂谈——从发布会上的产品展示说起

3DCAT实时渲染

Mysql命令大全

跳楼梯企鹅

MySQL #数据库

Spring Cloud Stream简介

阿泽🧸

spring cloud stream 8月月更

【SimpleFunction系列二.3】Redisson分布式锁8种锁模式剖析

莫逸风

分布式锁 redisson 分布式锁

私有化输出的服务网格我们是这样做的

阿里巴巴云原生

阿里云 Kubernetes 云原生 服务网格

王熙凤穿越到 2022 年,一定会采购的单点登录服务

Authing

GitLab 自动删除项目?仅需四步,丝滑迁移至极狐GitLab

极狐GitLab

git DevOps gitlab 敏捷开发 极狐GitLab

企业中的知识管理价值是怎样体现的

Baklib

企业与团队怎样建立一个有效的、切实可行的知识管理系统

Baklib

架构师第一课,一文带你玩转ruoyi架构

小鲍侃java

框架 Java web 构架 spring-boot 签约计划第三季

纳瓦尔宝典:财富与幸福指南

石云升

读书笔记 财务自由 幸福 8月月更

使用 Google Breakpad 来助力解决程序崩溃

HelloWorld杰少

ios 游戏开发 崩溃分析 google_breakpad 8月月更

Linux实用命令lsof命令

flow

8月月更

企业为何要实行知识管理?

Baklib

(WebFlux)002、如何打印日志与链路ID

编号94530

spring 日志 aop SpringWebflux Reactor3

.NET 5 的重大改变:消失的历史技术_语言 & 开发_Jonathan Allen_InfoQ精选文章