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

.NET平台系列12 .NET未来之开源.NET Core

suiw9 2025-01-23 20:37 22 浏览 0 评论

本系列技术大约30篇文章,欢迎关注、点赞、评论、转发,每天都能获取IT优质内容。


 微软于2014年11月推出了.NET Core 1.0。.NET Core的目标是从我们在过去12年中对.NET Framework的构建、交付和服务的经验中吸取教训,并开发出的更好的产品。这些改进的一些例子包括并行安装(可以安装新版本,而不必担心破坏现有应用程序)、自包含应用程序(应用程序可以嵌入.NET,因此.NET不需要在计算机上安装),而不是Windows操作系统的一个组件(.NET发布独立于操作系统时间表的新版本)等等。在此基础上,我们使.NET Core开源和跨平台。

  .NET Core 1.0主要关注高性能Web和微服务。NETCore2.0增加了2000多个API和组件,如Razor页面和SignalR,使Web应用程序更容易移植到.NETCore。现在.NETCore3.0通过添加WinForms、WPF和EntityFramework6来支持桌面应用程序,这使得将桌面应用程序移植到.NETCore成为可能。

  在.NET Core 3.0之后,我们将不再从.NETFramework移植更多功能。如果您是一名Web Form开发人员,并且希望在.NET Core上构建一个新的应用程序,我们建议您使用Blazor,它提供了最接近的编程模型。如果您是远程处理或WCF服务器开发人员,并且希望在.NET Core上构建新的应用程序,我们建议您选择ASP.NET Core Web API或gRPC,后者提供跨平台和跨编程语言(基于契约的gRPC)的能力。如果您是Windows工作流开发人员,则有一个.NET Core的开源工作流项目。

  随着.NET Core 3.0于2019年9月发布,我们认为所有新的.NET应用程序都应该基于.NET Core。.NET Framework 中支持的主要应用程序类型在.NET Core 中任然受到支持。如果某些组件没有被移植过来,则建议使用新的技术替代(如:gRPC代替WCF、Workflow-Core 与 elsa.NET 代替 WorkFlow)。在.NET中的所有未来投资都将在.NET核心中进行。这包括:运行时、JIT、AOT、GC、BCL(基类库)、C#、VB.NET、F#、ASP.NET、实体框架、ML.NET、WinForms、WPF和Xamarin。

  .NET Framework 4.8 将是.NET Framework的最后一个主要版本。如果您有您正在维护的现有.NET Framework应用程序,则无需将这些应用程序移动到.NET Core。我们将继续服务和支持.NET框架,其中包括bug、可靠性和安全修复。它将继续随Windows一起发布(大部分Windows依赖.NET Framework),我们将继续改进Visual Studio中对.NET的工具支持(Visual Studio是在.NET Framework上编写的)。

  新的应用程序应该建立在.NET Core上。.NETCore是.NET未来投资的地方。现有的应用程序可以安全地保留在.NET Framework上,这将得到支持。想要利用.NET新功能的现有应用程序应该考虑迁移到.NET核心。随着我们对未来的规划,我们将为平台带来更多的功能。

  .NET Core是一个模块化的开发堆栈,是将来所有.NET平台的基础。ASP.NET5和.NET Native已经使用了它。下图展示了NET Core以及它与NET Framework的关系。

为什么要开源.NET Core

开源.NET Core的主要原因有两个:

  • 为跨平台.NET奠定基础作为.NET开发人员,现在可以在一段时间内不仅在Windows上构建和运行代码,还包括Linux,MacOS,iOs和Android。挑战在于Windows实现具有一个代码库,而Mono具有完全独立的代码库。Mono社区实际上被迫重新实现.NET,因为没有可用的开源实现。当然,自Rotor起就可以使用源代码,但是我们没有使用OSI批准的开放源代码许可证,这使得Rotor成为一个非启动程序。客户报告了各种不匹配的情况,很难修复,因为任何一方都不能查看另一方的代码。这也会导致在实际上并不特定于平台的领域中出现大量重复工作。最近的一个例子是不可变集合。构建跨平台堆栈的最佳方法是以协作的方式构建单个堆栈。做到这一点的最佳方法是将其开源。
  • 建立并利用更强大的生态系统微软团队通过NuGet追求了一个更加敏捷的开发周期,至今已有近两年时间。我们已经看到在早期发布并经常发布以使客户提供反馈方面取得了巨大的成功。

使用 GitHub

  2018年6月微软以75亿美元收购 GitHub。之后.NET团队决定在GitHub上托管.NET Core。原则上,我们不想让社区来到我们这里。相反,我们想去社区已经存在的地方。根据许多其他项目收到的反馈,似乎.NET社区中的大多数人都在GitHub上。

  难以置信,我也很怀疑,所以我做了一个小实验。我把我的一个个人开源项目从CodePlex搬到了GitHub。在CodePlex的两年里,我只收到一个pull请求。在我搬到GitHub的五天后,我已经收到了三个pull请求,并找到了另外两个贡献者。这是三个月前的事了。从那以后,我总共收到了16个pull请求,其中许多请求都有大量的特性工作(顺便说一下:第一个是关于增加单元测试的,这有多棒?)。虽然这显然不是一个具有代表性的样本大小,但它确实非常符合我们从客户那里听到的。

  所以为了达到社区的目的,我们决定在GitHub上托管.NET Core 。一个月前,我们已经在GitHub上提供了示例。

开放式发展

  我的团队以前做过开源,例如MEF,但我认为公平地说,这并不是很有成效。我们认为主要原因是缺乏社区参与。虽然我们提供了源代码,但我们还没有投资建立一个围绕它的社区。我们坚信建立一个社区是任何开源项目成功的关键。为了建立一个社区,发展必须在开放的环境中进行。

  为了达到期望,我们还希望在公开计划开发方式,必须克服的挑战以及尚未完全解决的领域方面保持透明。因此,让我解释一下。

第一步是我们将停止做代码炸弹,这是我们以前用MEF做的。代码炸弹本质上是团队实际工作的内部系统对公共源代码的半定期更新。这个问题有几个原因。一方面,时间延迟使公开讨论变得困难,因为并非所有各方都看到同一个来源。另一个大问题是,内部历史刚刚丢失。自动同步在某种程度上是有帮助的,但感觉就像是重新发明了Git。因此,我们没有使用代码炸弹,而是设置了开发环境,使公共GitHub存储库成为主导系统。这意味着所有代码更改都将立即生效。但我们不会就此止步:

  • 代码审查。我们还希望通过GitHub的pull request模型让团队也在公开场合进行所有代码审查。
  • 设计论文和讨论。我们还将共享设计说明,规范和特定于实现的文档。我们需要弄清楚我们将使用哪种格式。至少您可以期待基于Markdown的文档,类似于Mad的C#设计说明。我们的另一个想法是记录我们的设计会议并在Channel 9上分享。我们需要弄清楚如何才能以一定的节奏进行此操作。

我们计划主要使用GitHub问题来跟踪错误。棘手的是,我们还有其他的来源,特别是用户语音、连接和内部TFS。我们对这项工作的看法如下:

  • 用户语音。由于出色的投票系统,User Voice非常适合优先考虑可能相当昂贵的工作项目的投资。因此,对于更大的功能和根本的创新,用户语音是最佳选择。
  • 连接。Connect主要供企业客户和产品支持使用。我们很可能会继续在该通道中使用它,但是在为.NET Core提交错误时,我们不建议您这样做。
  • 内部TFS。虽然我们不再将TF版本控制用于.NET Core,但大块的DevDiv仍然可以使用。为了进行跨小组的协作,我们可能会继续允许团队在TFS中向我们提交错误。我们正在努力弄清楚如何将这些错误公开。一种选择是创建一个自动镜像系统。

接受贡献

  我们接受贡献!但正如任何开源项目一样,我们并不是盲目地接受一切。我们收到的拉取请求将根据以下标准进行判断:

  • 线路图。所有项目都将精力集中在某些领域。为了保持焦点和动力,将大部分工作与产品路线图保持一致很重要。
  • 质量。我们有责任提供高质量的代码。因此,外部人员必须满足Microsoft员工必须满足的相同质量要求。这包括具有正确的设计,体系结构,足够的测试范围以及遵循编码风格。

  我们相信,通过公开进行开发,我们可以为外部开发人员提供足够的成功环境。例如,您将能够查看我们的代码审查并阅读有关内部设计方式的文档。我们还将发布路线图。通常情况下,最好通过提前告诉我们您想贡献什么来避免过晚的意外。例如,我们可以通过向您提供指向文档的指针或讨论您的方法来提供帮助。我们还想到了将GitHub问题标记为待办事项,以便在宣传中表明我们希望您在特定工作项上提供帮助。

  通常,所有贡献都将使用GitHub的pull request模型完成。也就是说,您将分叉我们的项目,在主题分支中执行工作,然后针对我们的master分支提交拉取请求。这与我们用于代码审查的模型相同。

  在我们将您的工作整合到项目中之前,您需要签署贡献者许可协议(CLA)。我们目前正在使用该工具,但它看起来可能类似于Azure CLA流程。

构建并运行自己的Forks

为了发挥我们的作用或尝试自己的修改,您需要能够构建和运行自己的库版本。我们希望使它像馅饼一样容易,所以这里是:

  • 您克隆了我们的仓库()git clone https://github.com/dotnet/corefx
  • 您调用 build.cmd

该构建仅需要Visual Studio 2013(即不需要“ Dev14”)。它将构建所有库并运行单元测试。

过去我们面临的挑战之一是强大的命名,这使您无法将二进制文件简单地放入现有项目中。我们通过提供一种强名称二进制文件的新方法解决了这一问题,我们称其为开放源代码签名。您可以在我们的开发人员指南中找到更多信息。

.NET 基金会

.NET Core项目由.NET Foundation负责。我们认为,这将是促进和推进.NET Core堆栈的关键部分。我们正在与Xamarin / Mono的Miguel de Icaza紧密合作,以创建可以成为.NET Core跨平台实现的共享代码库。

如今,GitHub上只有一部分库可用:

  • 不可变集合
  • SIMD
  • Assembly Metadata Reader
  • XDocument
  • XmlDocument

以下是我们正在努力的领域:

  • 更多的类库。
  • 在非Windows平台上构建和运行。
  • .NET Core运行时(CoreCLR)。

参考文献:

《.NET Core is the Future of .NET 》
https://devblogs.microsoft.com/dotnet/net-core-is-the-future-of-net/

《.NET Core is Open Source》
https://devblogs.microsoft.com/dotnet/net-core-is-open-source/


本系列技术大约30篇文章,欢迎关注、点赞、评论、转发,每天都能获取IT优质内容。

系列博客文章导航

《.NET平台系列13 .NET5 大统一平台》

《.NET平台系列12 .NET未来之开源.NET Core》【本文】

《.NET平台系列11 .NET 平台未来规划》


#于月仙丈夫发讣告#

#人民日报评阿里女员工被侵害事件#

#专家:本土疫情或于8月底解决#

#开车时遇到动物该躲还是撞#

#开车时遇到动物该躲还是撞#

相关推荐

nginx的反向代理(Nginx的反向代理和负载均衡)

nginxProxy代理1、代理原理反向代理服务的实现:需要有一个负载均衡设备(即反向代理服务器)来分发用户请求,将用户请求分发到后端正真提供服务的服务器上。服务器返回自己的服务到负载均衡设备。负...

Nginx UI: 更好用更现代化的Nginx 管理面板

各位铲屎官大家好,我是喵~...

性能测试之tomcat+nginx负载均衡(nginxtcp负载均衡)

nginxtomcat配置准备工作:两个tomcat执行命令cp-rapache-tomcat-8.5.56apache-tomcat-8.5.56_2修改被复制的tomcat2下con...

nginx upstream节点健康检查(nginx tcp 健康检查)

1、前提条件编译nginx时增加nginx_upstream_check_module模板git地址:https://github.com/yaoweibin/nginx_upstream_check...

Nginx 的高并发处理能力(nginx支持高并发原理)

为了实现Nginx的高并发处理能力,需要从**硬件资源**、**操作系统**、**Nginx配置**等多个方面进行优化。以下是详细的配置和示例:---...

Nginx最全详解(万字图文总结)(nginxs)

大家好,我是mikechen。Nginx是非常重要的负载均衡中间件,被广泛应用于大型网站架构,下面我就全面来详解Nginx@mikechen本篇已收于mikechen原创超30万字《阿里架构师进阶专题...

如何用 Nginx 实现前端灰度发布(nginx 灰度测试规则)

前言在前端开发中,灰度发布是一种重要的策略,它允许我们在不影响所有用户的情况下,逐步推出新功能或更新。通过灰度发布,我们可以测试新版本的稳定性和性能,同时收集用户反馈。今天,我们将探讨如何使用Ngi...

nginx配置优化场景-直接套用so happy!

前言(叠甲在先)Nginx是一款高性能的Web服务器,广泛应用于互联网领域。...

Nginx配置前后端服务(nginx前后端分离部署)

nginx安装完成后,可以通过命令查看配置文件nginx-t配置文件nginx.conf,是总的配置,有的人会把配置全部配置到这个文件中,如果服务很多,这个文件变得非常庞大,我见过一个配置很大的,在...

使用Nginx配置TCP负载均衡(nginx如何配置负载均衡)

假设Kubernetes集群已经配置好,我们将基于CentOS为Nginx创建一个虚拟机。...

Nginx服务器深度指南:安装、配置、优化指令超详解

在当今数字化时代,Web服务器是支撑互联网应用的关键基础设施。Nginx作为一款高性能的开源Web服务器,凭借卓越的性能、丰富的功能和出色的稳定性,在Web服务器领域占据了重要地位。无论是大型互联网公...

Nginx的配置详解(附代码)(nginx基本配置)

本篇文章给大家带来的内容是关于Nginx的配置详解(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。常用配置项在工作中,我们与Nginx打交道更多的是通过其配置文件来进行。...

Nginx配置文件详解(nginx配置文件详解带实例)

Nginx配置文件详解Nginx是一款面向性能设计的HTTP服务器,相较于Apache、lighttpd具有占有内存少,稳定性高等优势。...

从 0 到 1:构建高可用 Linux 负载均衡集群(基于 Nginx + Keepalived)

在高并发业务场景下,单台服务器往往无法支撑大量请求,因此需要使用**负载均衡(LoadBalancing)**技术来提升系统的稳定性和可用性。Nginx+Keepalived是常见的开源负载均...

配置Nginx TCP转发(nginx 接口转发)

Nginx一般用在HTTP的转发,TCP的转发大都会使用HAProxy。工作中遇到一个需求,用到了Nginx服务作为TCP转发。场景是这样,数据采集设备通过公网将数据推送到后端应用服务,服务部署在业主...

取消回复欢迎 发表评论: