net5有什么不同
什么是.NET?什么是.NET Core?.NET和.NET Core区别又是什么呢?,下面一起来看看本站小编码老头给大家精心整理的答案,希望对您有帮助
本文首发于【码友网】--《什么是.NET?什么是.NET Core?.NET和.NET Core区别又是什么呢?》
对于.NET平台的初学者来说,有时候比较困惑“什么是.NET?什么是.NET Core?.NET和.NET Core区别又是什么呢?”。确实,目前微软的开发平台有两种不同的.NET运行时环境,一种是.NET Framework,另一种则是.NET Core(.NET 5),不同的目标框架运行时环境不同。
那这两者的区别到底是什么,在开发时如何选择不同的.NET框架呢?本文将为.NET开发者逐一讲解。
在谈及.NET与.NET Core的区别之前,我们得先聊聊.NET的历史,了解一下为什么会有.NET Core?
在.NET Core出现之前,微软的应用开发主要运行载体是自家的操作系统,即Windows操作系统。2002年时,微软发布了.NET框架的早期版本,当前只有一个框架,即.NET Framework。不久之后,微软又发布了.NET 精简版框架(.NET Compact Framework),这是.NET框架的一个子集,适用于更小的设备,特别是Windows移动设备(Windows Mobile)。这个精简版的框架是一个独立于.NET框架的代码库。它包括了整个运行时的垂直结构:运行时、框架和顶部的应用程序模型。
.NET Framework是微软为开发应用程序而创建的主要运行在Windows操作系统的软件框架。它包含了大量的FCL(Framework Class Library)框架类库并且提供了多种语言之间的跨语言互操作。.NET Framework平台的应用程序在公共语言运行时(CLR)中执行,CLR是一个应用程序的虚拟机,它提供安全、内存管理和异常处理等服务。因此,使用.NET Framework编写的计算机代码称为“托管代码”。框架类库(FCL)和公共语言运行时(CLR)一起构成了.NET Framework。
早期(.NET Core之前)的.NET应用程序是不跨平台(操作系统的),它只能运行在Windows操作系统上,并且操作系统中还必须安装.NET Framework环境。如果要运行在其他操作系统上,需要借助第三方的框架,比如: Mono—一个开源的第三方.NET Framework框架,它可以运行在Linux和Mac OS操作系统上。
2011年5月,Mono开发者为了使用C#开发跨平台的移动设备应用,成立并发布了Xamarin后于2016年被微软收购,但这只是微软跨平台的第一步,毕竟Xamarin只适合开发移动端应用。
随意移动设备迅速占领市场,Windows平台的大势已去。直到.NET Core,.NET才算真正的跨平台,这也是微软重大的战略转变。2014年12月,微软拥抱开源社区,宣布开源了.NET Core的核心代码,也是.NET跨平台迈出的最重要的一步。
经过不断地迭代,2016年6月发布和.NET Core 1.0,2017年3月发布.NET Core1.1.1。
.NET Core是一种模块化实现,可用于各种垂直领域,从数据中心扩展到基于触摸的设备,它是开源的,跨平台的,能在Windows、LinuxMac OSX等操作系统上运行,同时还支持Docker等容器化环境安装和部署。
微软为了统一.NET平台,计划将所有的.NET运行时统一为一个.NET平台,并为所有应用程序模型(如:.NET Core, Windows Forms, WPF, UWP, Xamarin, Blazor)提供统一的基类库(BCL)。在2019年5月6日宣布了.NET 5将是.NET Core 3.0的下一个主要版本。
2020年3月,微软发布了.NET 5的第一个预览版,并在同年的11月10日发布了.NET 5的第一个正式版。
以下是一张如今.NET平台的生态示意图:
从上面的图表中可以看出,.NET生态系统有三个主要的高级组件——.NET Framework、.NET Core和Xamarin组成。
.NET Framework:支持Windows和Web应用程序。现在,你仍然可以使.NET Framework作为目标框架来构建运行于Windows操作系统的Winform、WPF和UWP等桌面应用程序,以及基于ASP.NET MVC的Web应用程序。
.NET Core:是一个新的、开源的、跨平台框架,它用于构建适用于跨操作系统的应用程序,包括Windows、Mac和Linux。结合C#,它的应用场景也相当广泛,比如:
用一套代码开发基于Xamarin的支持多端(Windows,Android,iOS)的应用程序;可以开发基于Blazor的桌面应用;跨平台的网站应用,Web API应用,微服务;跨平台的游戏开发Unity,目前应用得非常广泛,像【王者荣耀】这类大型的手游都是使用Unity开发出来的;基于WPF的桌面应用程序,使用WPF你可以自定义完成超酷的用户交互界面;物联网人工智能机器学习俗语说:“长江后浪推前浪。”,技术领域也是如此。随着开发技术的不断发展和进步,新技术终将代替老技术。
如果你是一位.NET的初学者,并者没有历史项目(基于.NET Framework框架的项目)的包袱,建议你可以直接从.NET Core(.NET 5)入手学习,因为它具备现代开发技术的绝大多数优点:开源,跨平台,支持容器化部署等。
继 C#实现 await/async 无栈协程几年后,davidwrighton 实现了.NET 绿色线程(有栈协程)的原型
https://github.com/dotnet/runtimelab/pull/2002
.NET Runtimelab 中绿色线程的原型实现的 PR,在不久的将来,.NET 开发者也可以方便的用上有栈协程,目前的启动一个无栈协程的 API 如下所示:
https://twitter.com/EgorBo/status/1579474949152313347?ref_src=twsrc%5Etfw
谈论 FOH(冻结对象堆)的许多部分将被合并到.NET 8 中,因此像typeof(x)
这样的东西在生成 JIT 代码时可以处理直接引用省略写屏障,进一步提升性能。对比的汇编代码如下所示:
https://devblogs.microsoft.com/dotnet/bing-ads-campaign-platform-journey-to-dotnet-6/
一个关于 Bing 的搜索广告活动平台向.NET 6 迁移的案例研究(+AKS)。
该平台建立在几十个分布式服务上,每秒处理数千个请求,时间不到 100ms。通过 WCF 托管在一个(仅仅是 "解除 "的)Windows 虚拟机中的.NET 框架 4.6 和 SOAP 服务。在 Windows 虚拟机中托管了一个 WCF 的 SOAP 服务和一个.NET 框架 4.6。
文章介绍了转移到新的.NET 平台的原因。
原因主要有以下五点:
跨平台,如使用容器。
.NET Core 开发在高性能、语言特性和.NET Framwork 停止更新
由于快速迭代改进,减少了创新摩擦
开放源代码。
卓越的工具,如 CLI 工具、SDK 风格的项目和消除绑定重定向等
迁移过程中,库的顺序是".NET Framwork 4.6→. Framwork .7→.NET Standard 2.0",而应用的顺序是".NET Framwork 4.6→.NET Framwork 4.7→.NET Core 3.1→.NET 5→.NET 6",按顺序排列。.NET Framwork 4.6 并不完全支持.NET Standard,迁移到.NET Standard 并不容易。
该项目在迁移过程中提出了几个挑战和解决方案。
首先,该项目依赖于一些 NuGet 软件包,这意味着必须更新软件包和替换旧库。不兼容的软件包被重新包装,并以支持.NET 标准的形式发布到内部软件包中,甚至没有源代码的软件包也被反编译和修补,使其与.NET 标准兼容。
通过转移到 PackageReference 方法,解决了绑定重定向的问题,这也解决了菱形依赖性问题。由于有大量的.csproj,迁移是通过 SDK 式的转换工具实现的。随后,.NET 团队发布了一个名为 try-convert 的类似工具。他们还试图集中管理软件包的版本,以减少软件包依赖关系的复杂性。(文章中的链接。Microsoft.Build.CentralPackageVersions[1]是一个新的NuGet 的 中央软件包管理[2],它似乎是[NuGet 的]的前身。
最后,还有对 WCF 的依赖。该服务是由 WCF 用 SOAP 服务构建的,由于它是对用户开放的,所以不可能迁移到类似 gRPC 的东西上,所以最后创建了 CoreWCF,它是 WCF 的一个子集,并进行了迁移。谈到.NET 框架与.NET 的关系时,他说:"我们的目标是使我们的产品和服务更有竞争力。
从 WCF 到 CoreWCF 的迁移对.NET 有很大的影响,可以减少 40-50%的内存使用。
总而言之,向.NET 6 的迁移是一次大规模的、痛苦的但值得的经历,从大型代码库的迁移中总结出以下经验:
迁移到.NET 框架 4.7 或.NET 框架 4.8
将所有项目转换为 SDK 风格,并在开始工作前使用 PackageReference。
在.NET 框架和.NET 项目之间可以共享代码。
使用集中的软件包管理,以方便迁移到新的 NuGet 软件包上
从少年到天才:一个优化的故事 | by Israel Lot | Oct, 2022 | ITNEXT
https://itnext.io/from-junior-to-genius-an-optimization-story-ab20afc8159d
一篇关于调整代码的文章,根据计算 32 位校验和的代码,在不同的阶段进行计算。
文章从一个简单的实现,到一个不安全的实现,到一个棘手的实现,到一个简单的实现,到一个使用 SIMD 的实现,最后到一个 85 倍的性能优化。
Console.ReadKy
在.NET 7 中的优化 - .NET Blog
https://devblogs.microsoft.com/dotnet/console-readkey-improvements-in-net-7/
文章描述了.NET 7 中的重写和修改,使Console.ReadKey
在 Unix/Linux 上表现得更好。
一段时间以来,在 Unix/Linux 上的Console.ReadKey
的行为,在输入的组合键和处理修改键方面,已经发现了一些 BUG。为了解决这个问题,在.NET 7 中的代码已经被重新编写了。
文章介绍了在重写前为增加自动测试覆盖率所采取的方法,内部系统调用的调用,旧的实现和新的实现。
它还引入了 runtimeconfig.json 和环境变量设置,恢复到.NET 6 兼容行为。这些兼容性行为将在.NET 8 中被删除。
在 Visual Studio 中对文件进行比较 - Visual Studio Blog
https://devblogs.microsoft.com/visualstudio/comparing-files-in-visual-studio/
关于考虑在 Visual Studio 中实现文件比较功能的问题。
Visual Studio 过去没有提供通过选择任意文件来比较文件的功能,但它已经开始考虑。首先,他们已经开始试验一个名为 "文件差异 "的功能扩展,文章介绍了该扩展的功能。
如果你有兴趣,他们希望你能提供反馈和投票。
File Differ - Visual Studio Marketplace[3]
[NEW] Is there a way to compare two files from solution explorer? - Visual Studio Feedback[4]
用 MSAL.NET 对.NET MAUI 应用程序进行认证 - .NET Blog
https://devblogs.microsoft.com/dotnet/authentication-in-dotnet-maui-apps-msal/
宣布在 Microsoft Identity.Client 4.47.0(MSAL.NET)中支持.NET MAUI。
A 宣布.NET MAUI 社区工具包 v1.3 - .NET Blog
https://devblogs.microsoft.com/dotnet/announcing-the-dotnet-maui-community-toolkit-v13/
.NET MAUI Community Toolkit v1.3 已经发布。
.NET MAUI Community Toolkit v1.3 现已发布,包括状态栏样式、Gravatar 图片来源、动画增强和源链接支持等内容。
发布 11.0.0 版预览 2 · AvaloniaUI/Avalonia
https://github.com/AvaloniaUI/Avalonia/releases/tag/11.0.0-preview2
Avalonia 11.0.0 Preview 2 已经发布。
它包括几个稳定性改进和各种修复。
Rider 2022.3 EAP 2: 新的用户界面,改进的单元测试,更好的动态程序分析和更多的内容. | The .NET Tools Blog
https://blog.jetbrains.com/dotnet/2022/10/07/rider-2022-3-eap-2/
Rider 2022.3 EAP 2 已经发布。
新的基于 IntelliJ 的 IDE UI,改进了 Search Everywhere、工具窗口和 Solution Explorer,Linux 和 macOS 支持 Rider 的内置 dotMemory,支持 C# 11,改进了单元测试探索器,改进了 支持.NET MAUI,支持在 IIS 中启动,动态程序分析(数据库访问),等等。
宣布 NuGet PackageReference 支持针对.NET Core 和.NET 5 或更高版本的 C++/CLI MSBuild 项目 - C++ Team Blog
https://devblogs.microsoft.com/cppblog/announcing-nuget-packagereference-support-for-c-cli-msbuild-projects-targeting-net-core/
宣布 NuGet PackageReference 支持 Visual Studio 2022 17.3 版或更高版本中针对.NET Core 或.NET 5 或更高版本的 C++/CLI MSBuild 项目。
https://speakerdeck.com/muak/xamarin-dot-formsraiburariwo-mauiniyi-zhi-sitahua
谈及将 Xamarin.Forms 的库移植到.NET MAUI 的幻灯片。
在这里,我们要介绍一下.NET MAUI,包括实施方法的不同和技巧。
https://www.docswell.com/s/hiro128_777/KW79X5-2022-09-30-184910
幻灯片显示了.NET MAUI 与 Xamarin.Forms 的架构差异,对各种工具的支持现状等。
.NET 注释月刊 | 2022 年 10 月 | The .NET Tools Blog
https://blog.jetbrains.com/dotnet/2022/10/06/net-annotated-monthly-october-2022/
2022 年 10 月,JetBrains 公司发布了一篇与.NET 相关的信息汇总文章
[C#] .NET 使用 NamedPipe 进行进程间通信(IPC)(WPF 示例) - Qiita
https://qiita.com/kobayashi_stmn/items/7de42805eba009deebaa
关于如何在.NET 6 WPF 应用程序中使用 NamedPipe 进行进程间通信的文章。
Visual Studio 的 Azure Marketplace 镜像现在支持 Microsoft Dev Box - Visual Studio Blog
https://devblogs.microsoft.com/visualstudio/visual-studios-azure-marketplace-images-now-support-microsoft-dev-box/
宣布 Azure Marketplace Visual Studio 镜像现在由 Microsoft Dev Box 支持。
https://andrewlock.net/adding-validation-to-strongly-typed-configuration-objects-in-dotnet-6/
关于如何在.NET 6 Microsoft.Extensions.Configuration 中为强类型的配置对象添加验证的文章。
了解 OpenTelemetry .NET (8) 手动追踪连接示例:通过 Azure 服务总线在应用程序之间连接追踪
https://tech.tanaka733.net/entry/2022/10/opentelemetry-dotnet-08
关于如何使用 Azure 服务总线在服务之间连接请求的痕迹的文章。
https://jonhilton.net/blazor-custom-elements/
关于如何使用自定义元素在 Blazor 中构建动态元素的文章。
https://particular.net/blog/pipeline-and-closure-allocations
关于通过减少 NServiceBus 中的 lambda 捕获(分配)来提高性能的文章。
https://zenn.dev/test_myname/articles/d982b67cf0615f
关于如何在.NET MAUI 中显示/隐藏 Android 屏幕键盘的文章。
https://dev.to/dotnet/blazor-wasm-custom-404-page-on-gh-pages-1o99
当 Blazor WebAssembly 托管在 GitHub Pages 上时,如何在访问不存在的页面时显示一个自定义错误页面的文章。
GitHub - xoofx/Antlr4Ast: Antlr4Ast 是一个.NET 库,为 ANTLR4/g4 文件提供一个解析器和抽象语法树(AST)。
https://github.com/xoofx/Antlr4Ast
一个能解析 ANTLR4/g4 文件以创建 AST 的库。
Hey .NET folks, it's a rainy Sunday here so I just released a new .NET library https://t.co/3tlFpUlJnt to parse ANTLR4/g4 files into a lightweight AST useful for codegen scenarios.I'll use this library for #starklang to generate the data oriented syntax from an ANTLR g4 spec!
下一篇:50etf期权如何交易
发表评论