zoukankan      html  css  js  c++  java
  • vNext之旅(2):net451、dotnet5.4、dnx451、dnxcore50都是什么鬼

        继上次”vNext之旅(1):从概念和基础开始”之后再次学习vNext重新遇到了弄不懂的事情,花了一些时间学习,今天来分享一下,为后人节省些时间。

    起因

        在用vNext造轮子——框架的时候引入“Microsoft.Dnx.Runtime”包错误。错误如下:

    image

    当时就很郁闷我明明用的是最新的版本:“1.0.0-rc-final”啊,为什么会报错,微软改名之后没有及时更新包吗?

    下面我打开了这个包在NuGet的地址。

    image

    发现确实只写了“DNX4.5.1”和“DNXCore50”这两个版本,我同时又打开了“Microsoft.Extensions.DependencyInjection”包的NuGet地址。

    image

    发现了“.NETFramework 4.5.1”、“.NETPlatform 5.4”、”.NETCore5.0”。

    这时我很好奇,这两个包同是vNext的产物,没有原因支持的平台不一样啊,抱着这个问题我觉得创建个ConsoleApp测试一下。

    打开“project.json”发现了和类库不一样的地方

    image

    这边的frameworks的命名完全不一样,

    在类库中为:“net451”、“dotnet5.4”而在这里变成了“dnx451”、“dnxcore50”。

    困惑又加重了,难道微软改名之后忘记改了ConsoleApp的模板?

    解惑

    我试着把这几个关键词输入google,找了了一些文章,终于解决了我的迷惑。

    文章地址为:

    https://github.com/aspnet/Announcements/issues/98

    https://github.com/dotnet/corefx/blob/master/Documentation/project-docs/standard-platform.md

    image

    从这段话中说明了为什么“ConsoleApp”和“类库”项目框架目标不一致是正常的。。。

    也给出了“ConsoleApp”、“测试项目”还是需要使用“dnx”和“dnxcore”这样的命名,而类库则需要使用“net”和“dotnet”这样的命名。

    也给出了迁移方案,同时也给出了编码过程中的环境变量:

    1.DNX451 => NET451

    2.DNXCORE50 => DONET5_4

    同时也发现,微软觉得应用程序和测试项目该采用“dnx”和“dnxcore”命名方式的框架目标。

    至此疑惑解开,但还是觉得奇怪,微软为什么要这样区分,当时在.NET Framework上不就没有分这么多吗?

    深究

    为什么微软需要这么做?

    抱着这样的疑问打开第二个链接,发现了这一段很好的解释了“为什么”。

    image

    这么做只有一个目标:可移植性。

    在之前我们再用NuGet GUI工具打包的时候会发现有很多选择(下图)

    image

    而这些平台绝大数都拥有CLR,唯一变的只是应用程序端,只有这个端不一样,那么我开发一个汇率计算算法需要每个平台单独写吗?其实不需要,因为我们都运行于CLR,我们有CTS、CLS还有CLR这些东西你们去做兼容就好了,不需要开发者在纠结了,所以现在的微软一直强调“一个平台战略”、“一次编译到处运行”,只把会变化的应用程序端设置框架版本,而类库等通用的东西尽量变成全部可移植的。

    下图来自微软:

    52bc69d6-879c-11e5-8640-d92f9ee1e2d9

    右边的就属于类库,而左边的被微软定位为应用程序端的目标运行时。微软希望现代化的类库可以同时运行在这些端的运行时上,当然这个动作需要端的运行时配合与支持(微软给出的CLR的标准、语言规范等)。

    下图是对应关系:

    image

    交流方式

    QQ群:384413261(RabbitHub)

    Email:majian159@live.com

  • 相关阅读:
    C#的注释
    为知笔记发布到博客,css设置
    eclipse创建springboot项目的三种方法
    创建maven父项目以及子项目
    C# 快捷键(总结)
    idea 项目转 eclipse项目
    freemarker常见语法大全
    Spring Boot Freemarker特别篇之contextPath【从零开始学Spring Boot
    Spring mvc请求处理流程详解(一)之视图解析
    React+SpringBoot项目部署
  • 原文地址:https://www.cnblogs.com/ants/p/5129279.html
Copyright © 2011-2022 走看看