【AICon】 如何构建高效的 RAG 系统?RAG 技术在实际应用中遇到的挑战及应对策略?>>> 了解详情
写点什么

将在.NET Core 中被废止的技术

  • 2016-02-14
  • 本文字数:2297 字

    阅读完需:约 8 分钟

虽然有一部分现有的.NET 应用程序,尤其是基于 ASP.NET MVC 的应用程序将能够比较简单地迁移至.NET Core,但另一部分.NET 应用在迁移过程中可能会遇到某些问题。有一些问题是显而易见的,例如从 WinForms 或 WPF 应用迁移至 Universal Windows Applications(UWP),而另一类些问题则更加微妙,这关系到.NET Framework 核心功能中更底层的实现。

反射

反射 API 在.NET Core 中产生了很大的变化。正如在 WinRT 中的应用方式一样,反射功能被分成一种轻量级的版本以及一种开销更大的版本。来自微软的 Immo Landwerth 写道:

在推出.NET Native 时,我们利用了一种技术,它允许我们将应用与框架和第三方依赖进行静态链接。要使这种链接功能可行,它必须能够找出在你的应用没有使用的那部分框架功能。对于其他技术,例如 C++ 来说,这一过程并不复杂,因为这种系统并不具备反射这样的动态能力。当然,在.NET Native 中仍然支持反射,但我们希望让这个平台尽可能地降低开销,也就是说不必为你所不需要的特性增加开销。这一点对于反射来说尤其明显,因为它对于运行时以及编译器能够基于静态信息进行哪些操作施加了极大的限制。

因此,在理想的情况下,反射应当作为.NET Core 中一个可选的组件,你可以选择在自己的应用中完全放弃使用它。麻烦在于,System.Object 在进行 Object.GetType() 操作时将对反射产生依赖。为了打破这种依赖,我们决定让 System.Type 不再展现整个反射类型信息,而仅仅展示类型的名称。这也意味着在.NET Core 中的 System.Type 不再包括 GetMembers() 等 API,但仍然会暴露 Name 等 API。

通过一个名为 GetTypeInfo 的扩展方法,可以得到在一般情况下能够从 Type 对象中获取的信息。TypeInfo 类所包含的信息没有原来那么丰富,但微软最近决定在.NET Core 中重新引入一部分反射API ,这部分变更是超出原先计划之外的。

为了使代码更容易进行移植,.NET 4.5 及之后的版本提供了对 TypeInfo 的某种支持,它与在.NET Core 中使用的版本相类似。

App Domain

App Domain 在 CoreCLR 中得以实现,但没有在.NET Native 中实现。由于对 App Domain 的实现需要大量的运行时特性支持,因此目前还没有任何对它的支持计划。“对于代码的隔离,我们建议通过进程或容器实现。而对于程序集的动态加载,我们建议使用新的 AssemblyLoadContext 类。”

Remoting

现如今,已经很少有开发者还能够记起 Remoting 库的存在,更不要说如何使用它了。即使还有人在使用,他们也一直在抱怨它的性能、高复杂性以及总体表现的脆弱性。

如今,多个.NET 应用在同一台机器上的通信基本都被 WCF 所取代,后者能够带来更好的性能,可用于管道或内存映射文件。对于跨机器的通信,微软推荐“使用一种低开销的纯文本协议,例如 HTTP”。因此,微软并没有在.NET Core 中支持 Remoting 的计划。

序列化

.NET Core 将支持大多数序列化器,例如数据契约序列化 XML 序列化 JSON.NET 以及 protobuf-net 。而一个被排除在外的重要角色是二进制序列化。

通过这十年来的经验,我们终于了解到序列化是一项非常复杂的任务,支持序列化的类型在兼容性方面要面对沉重的负担。因此,我们已经决定让序列化成为一种协议,它将在可用的公开 API 的基础上实现。然而,二进制序列化的实现需要对类型本身的深入了解,因为这种方式可以对整个对象图进行序列化,甚至包括私有的状态信息。

沙箱

从理论上说,沙箱是一种优秀的思想,它允许部分信任代码以安全的方式执行。但在实践中,要想正确地应用它非常困难,哪怕是一点点微小的错误,也会导致安全性方面的漏洞。Immo Landwerth 还表示,它“使实现变得更加困难,并且经常会给未使用沙箱的应用的性能带来负面影响。”

推荐的替代方案是使用独立的进程,通过一个具有有限权限的用户帐号运行这些进程。通过这种方式,运行时不必重复进行一些开销较大的权限检查工作,因为操作系统已经为你完成了这方面的任务。

其他组件

微软正考虑将下表中列举的组件进行开源,并移植到.NET Core。

  • System.Data。虽然它的基础层功能,即提供者模型与 SQL client 已经成为了.NET Core 的一部分,但某些特性目前仍不可用,例如对于 schema、DataTable 和 DataSet 的支持。
  • System.DirectoryServices。.NET Core 目前并不支持通过该组件与 LDAP 或活动目录进行通信。
  • System.Drawing。虽然从严格意义上来说,它应该属于一种客户端 API,但还是有大量开发者在服务端通过绘图 API 实现缩略图或水印的生成。我们目前还不支持在.NET Core 中使用这些 API。
  • System.Transactions。虽然 ADO.NET 支持事务,但并不包括对于分布式事务的支持,后者包括氛围事务(ambient transaction)及资源征集(enlistment)的概念。
  • System.Xml.Xsl 与 System.Xml.Schema。.NET Core 支持 XmlDocument 以及由 Linq 引入的 XDocument,包括 XPath 在内。不过,目前还不支持 XSD(XmlSchema)及 XSLT(XslTransform)。
  • System.Net.Mail。目前还不支持在.NET Core 中通过这些 API 实现电子邮件的发送。
  • System.IO.Ports。.NET Core 目前还不支持与串行化端口的通信。
  • System.Workflow。Windows Workflow Foundation(WF)目前在.NET Core 中尚不可用。
  • System.Xaml。在开发 UWP 应用时,开发者将使用 WinRT XAML API。因此,.NET Core 目前并不支持托管 XAML 框架,后者包括解析 XAML、并实例化描述对象图的功能。

你是否有兴趣帮助我们移植某个组件?.NET Framework 实现的部分源代码已经通过 MIT 许可进行了开源,作为 Reference Source 的一部分。我们正在设法让社区能够对我们的移植工作提供支持。如果你愿意参与这一项目,请发送邮件至 immol@microsoft.com。

查看英文原文: Discontinued Technology in .NET Core

2016-02-14 18:008704
用户头像

发布了 428 篇内容, 共 170.9 次阅读, 收获喜欢 36 次。

关注

评论

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

智能工厂:为制造业的数字化转型奠定基础

3D建模设计

3D场景建模 3D数字孪生场景编辑器 3D场布工具

Beyond Compare4 for Mac怎么使用?Beyond Compare功能特点详解

南屿

Mac软件 Beyond Compare 4 注册版 Beyond Compare注册码 文件夹比较工具

干货|EasyMR 基于 Kubernetes 应用的监控实践

袋鼠云数栈

大数据 Kubernetes 云原生 可观测性 Promtheus

技术文档指南:版本说明、网站文案、FAQ、案例研究与内容优化

小万哥

程序人生 软件工程 后端开发 技术写作 文档指南

JAVA开发工具Eclipse和MyEclipse

小魏写代码

数字孪生技术详解

3D建模设计

3D数字孪生场景编辑器 3D场布工具

数字孪生开发:基础知识、类型、优势和成本

3D建模设计

3D数字孪生场景编辑器 3D场布工具 3D场景搭建

【原理篇】Supabase应用开发为什么要配置RLS

张文平

权限 PgSQL Supabase 访问权限 Postgrest

商智C店H5性能优化实战

京东科技开发者

前端

2024-01-03:用go语言,给你两个长度为 n 下标从 0 开始的整数数组 cost 和 time, 分别表示给 n 堵不同的墙刷油漆需要的开销和时间。你有两名油漆匠, 一位需要 付费 的油漆匠

福大大架构师每日一题

福大大架构师每日一题

SVN客户端 smartsvn mac破解版 附许可文件 兼容M/intel

南屿

svn Mac软件 SmartSVN mac破解版 SmartSVN下载

什么是制造业中的数字孪生?

3D建模设计

3D场景应用 3D场景建模 3D数字孪生场景编辑器 3D场布工具

使用 Parallels Desktop 彻底改变您的开发和测试工作流程

南屿

Mac虚拟机 Parallels Desktop 18破解 Parallels Desktop 19

用友BIP全球司库助力陕西建工控股集团打造世界一流司库体系

用友BIP

全球司库

【原理篇】Supabase关联查询:内联、外联及外键约束

张文平

外键 Function 关联查询 Supabase Postgrest

苹果Mac版交互式原型设计 Axure RP 8 汉化激活版

mac大玩家j

Mac软件 原型设计工具 交互原型设计

【介绍篇】Supabase与Firebase的关系和区别

张文平

数据库 云服务 Baas Supabase firebase

营销创意素材如何秒级智能生成?即时创意白皮书来了!

京东科技开发者

好用的视频下载和转换器:YT Saver 中文直装版

胖墩儿不胖y

视频处理 Mac软件 视频处理工具

强大的数据库管理工具:DBeaver破解版

南屿

数据库 DBeaverEE 破解软件

小程序如何帮助在线教育打造业务新引擎

Geek_2305a8

程序员会不会被人工智能取代?

ZA技术社区

程序员 #人工智能

Microsoft 365 (原office365) Mac版 v16.80正式破解版下载

南屿

Office Microsoft 365 office许可证 office365破解版

支持M/Intel mac的Netflix 奈飞客户端 v2.13.0激活版

南屿

Netflix Mac激活版 macOS 播放客户端 网飞

详述 IntelliJ IDEA 遇到 java -source 1.3 中不支持某某操作的解决方法

南屿

IntelliJ IDEA IntelliJ IDEA 2023最新 IntelliJ IDEA密钥

京东商品评论数据接口(JD.item_review)丨京东API接口

tbapi

京东商品评论数据接口 京东商品评价接口 京东商品评论API 京东商品评价API 京东评论API

在智能制造中使用数字孪生的优势

3D建模设计

3D数字孪生 3D数字孪生场景编辑器 3D场布工具 3D场景搭建

简单两步,轻松卸载AlDente Pro,来围观~~

南屿

AlDente Pro破解版 AlDente Pro mac mac电池保护 AlDente Pro卸载 苹果电池助手

2024你好!

鲸品堂

为何 DevOps 会给开发人员带来压力和倦怠?

不在线第一只蜗牛

架构 DevOps 开发

SD-WAN组网方式详解

Ogcloud

网络 SD-WAN 组网 组网网络

将在.NET Core中被废止的技术_.NET_Jonathan Allen_InfoQ精选文章