• .Net Core vs .Net Framework 如何为一个应用程序选择一个运行时(翻译)


    .Net Core是下一件大事吗?我已经使用了一段时间了,我倾向认为它是。事实上,我们推测,在2018年,对这项技术熟练的开发人员将会有巨大的需求。但是它和.Net Framework的区别是什么?你需要知道什么才能有效的使用了它们。在这篇文章中,我们会解释主要的不同点和指导怎么确保最好的使用它们。

    在以前,.Net Framework只能工作在Window设备上。Xamarin和Mono项目致力于将.Net移植到移动设备、MacOS和Linux。.Net Core提供了一套标准的基本库让其在windows、linux、macos、移动设备可以使用。

    .Net 有下面四个部分组成:

    • Common language specification(CLS) :它定义了对象是如何实现的,因此它可以工作在任何地方,因为它跟系统平台无关。CLS是CTS(Common Type System)的子集,它设置了一种描述所以类型的通用方法。
    • Framework class library(FCL):是一个手机可重用类、接口和值类型的标准库。
    • Common language runtime(CLR):是运行框架并管理.Net程序执行的虚拟机。
    • 像VisualStudio这样的工具来创建独立的应用程序、交互式网站、Web应用程序和Web服务。

    .Net Core vs .Net Framework

      微软维护的两个运行时,它们有许多相同的API。这个共享的API就是所谓的.Net Stand.

    开发者使用.Net framework去创建Window桌面应用和基础服务应用。它包含Asp.Net web应用程序。.Net Core被用于创建服务应用让它能运行在Windows、Linux和Mac上。它目前还不支持创建桌面应用。开发者可以在两个运行中用VB.Net 、C#和F#编写程序。C#是面向对象的语言。对于工作在C和其相似语言的人来说,学习曲线应该不是问题。F#是跨平台语言同时也是面向对象的语言。Visual Basic在.Net Framework中可用,在.Net Core2.0对其支持有限。

    以下情况开发者应该选择.Net Core:

    .Net Core是一个跨平台的和开源的框架,它可以在任何平台开发。通常它被使用在云应用程序或将大型企业应用程序重构为微服务。所以应该什么时候使用呢?

    1、项目需要跨平台

    当一个应用程序需要运行在多个平台像Windows、Linux和MacOS使用。这些操作系统已经被支持作为开发工作站(支持的操作系统正在增长)。

    • VS可以在Window上使用,并在macOS上使用新的受限版本。
    • VS Code可以使用在Window、Linux和macOS上。
    • 命令行被使用在所有被支持的平台上。

    2、当使用Docker容器时

    容器和微服务架构经常在一起使用。因为它是轻量级和模块化的,.Net Core很好的工作在容器中。服务器应用可以跨平台部署到Docker容器中。.Net Framework也可以使用容器,但是镜像太大了。

    3、如果有很高的性能和可扩展系统需要

    微软推荐用.Net Core和Asp.Net Core来获取最高的性能和拓展性。当成百个微服务被使用,这变的很重要。应该需要较少数量的服务器和虚拟机。所获取的效率和可扩展性可以转化为除了节约成本之外更好的用户体验。

    4、如果你同时运行多个.Net 版本

    要在.NET中以不同版本的框架安装依赖项的应用程序,开发人员需要使用.NET Core。 可以使用不同版本的.NET在同一台服务器上运行多个服务。

    5、如果想用命令行开发

    一些开发人员更喜欢用轻量级的编辑器和命令行来工作。.Net Core有命令行接口已经支持所有的平台。它要求最小的安装在生产机器上。

    以下情况不适合使用.Net Core

    有一个问题:.Net Core还没有全部支持.Net 的库和拓展。在某些情况下,它可能不是当前最好的选择,但是,随着持续发展,它最终可能适用于大多数用例。 考虑以下情况:

    1、Windows Forms和WPF程序

    是不被支持的。你不得不使用mont去制作适合macOS的.Net  桌面应用程序。

    2、Asp.Net WebForms 不存在

    微软有计划实现它在ASP.NET Core。

    3、你需要创建WCF服务。

    .Net Core现在还不支持WCF。取而代之,你需要使用ASP.NET Core MVC创建REST API。

    4、第三方库的支持

    .Net Core2.0提供了.Net Framework和.Net Core的兼容。但是仍然有类库没有被实现的兼容问题。尽管如此,这将有助于将许多类库连接到.Net Core。

    5、缺少.Net Framework 特性

    一些.Net Framework功能在.Net Core中没有。比如EF Core是不同EF v6的。

    6、你需要访问特定的Windows API

    如果你的程序需要访问注册表、WMI或者其他的Window API,它是不能工作的。.Net Core被设计跟系统无关。

    7、部分支持VB.NET和F#

    微软和社区再持续更新,但是还没有全部支持。

    8、SingalR 没有被支持

    它计划在.Net Core2.1中被支持.

     以下情况,开发者应该使用.Net Framework

     它可以与Docker和Window容器一起使用,并且使用它是可行的。

    .Net Framework项目已经被使用。

    代替迁移、替换应用程序。比如开发者可以写一个新的web service用Asp.Net Core。

    .Net Framework项目中使用了第三方类库或者NuGet包,但在.Net Core中不可用。

    .Net Core正在被广泛的使用,如果你工作在.Net Framework类库在.Net Core中没有被兼容,仍然需要使用.Net Framework。NuGet是.NET和其他Microsoft开发平台的免费和开源软件包管理器。

    开发的项目中在.Net Core中还不可用

    • .Net Core还没有全部支持.Net Framework的技术。这些包含:
    • Asp.Net Web Forms应用程序
    • Asp.Net Web Pages应用程序
    • Asp.Net SignalR 服务端/客户端
    • WCF服务
    • 与工作流相关的服务
    • WPF和Windows Form

    一些平台还没有支持.Net Core

    什么时候不用.Net Framework

    下面这些情况不应该使用.Net Framework:

    • 项目需要在多个平台使用。
    • 需要高的性能和拓展性。
    •  项目必须使用开源框架

    怎样从.Net Framework移植到.Net Core上

    1、分析第三方依赖

     这设计到的不仅仅是知道第三方依赖关系是什么。如果要用程序运行在.Net Core上,应该如何依赖那些第三方依赖福关系,以及如果他们不运行,需要知道该应用程序需要做什么。

    NuGet软件包很容易检查,因为它通常在NuGet的网站上有描述依赖,并且软件包为每个平台都有一组文件夹。 您还可以查看该包的页面上的依赖关系,然后查找具有以下任一名称的文件夹或条目。

    如果依赖关系不是NuGet包,则ApiPort工具可以检查依赖关系的可移植性。

    与.NET Core 2.0一起使用的新功能,兼容性可以引用尚未转换为使用.NET Standard的.NET Framework软件包。 请确保彻底测试这些软件包,因为如果他们使用不受支持的API,它们可能仍然存在问题。

    2、标准库的目标

    .NET标准库旨在用于所有.NET运行时,因此定位.NET标准库是构建跨平台类库的最佳方式。

    有八个平台可以在不同程度上提供多个版本。 如果项目的目标版本较低,则无法引用以较高版本为目标的项目。 选择所有项目中使用的最低.NET标准版本。 下面是每个.NET标准版本的图表,显示了它们运行的特定区域:

    3、重新调整项目

    所有要移植的项目都需要针对.NET Framework 4.6.2。 这将确保用于.NET Framework特定目标的API替代品可用于不受支持的API。这可以在Visual Studio中用“Target Framework”命令轻松完成并重新编译这些项目。

     文章翻译来源为.NET Core vs .NET Framework: How to Pick a .NET Runtime for an Application

  • 相关阅读:
    写一个列表生成式,产生一个公差为11的等差数列
    如果对方网站反爬取,封IP了怎么办?
    为什么会选择redis数据库?
    你是否了解谷歌的无头浏览器?
    遇到的反爬虫策略以及解决方法?
    常见的HTTP方法有哪些?
    遇到反爬机制怎么处理?
    列举网络爬虫所用到的网络数据包,解析包?
    python中的关键字yield有什么作用?
    如下代码输出的是什么?
  • 原文地址:https://www.cnblogs.com/MicroHeart/p/9050044.html
Copyright © 2020-2023  润新知