P1-1 .NET Core概述

.NET Core概述


听课前提说明

  • 1、不讲C#基础语法和.NET基础类库(不需要学过ASP.NET等)
    • 需要懂HTML、JavaScript、数据库等
  • 2、上课尽量与老师用的Visual Studio 版本保持一致,杨中科老师是2019
    • VS2019支持.NET SDK-5
    • VS2022和VS2019的区别就是需要手动选择一下5.0的SDK版本
  • SDK6 以上最好用VS2022版本以上的
  • 3、程序员的自主学习能力
    • 记录笔记
    • 不依靠老师的课件、代码

什么是.NET Core

介绍

.NET是开发平台
.NET是.NET Framework、.NET Core、Xamarin/Mono的统称

  • .NET Framework
    • 近20年历史,.NET简称的最早拥有者,用于开发Windows程序
  • Xamarin/Mono
    • 主要做移动开发
    • Xamarin、Unity。Mono也能做Web等跨平台开发,但主要专注移动端
  • .NET Core
    • 免费、跨平台、开源
      • 跨平台:程序可以运行在Windows、Linux、Mac等操作系统下
    • 事件:社区的 微软 love Linux

为什么程序要跨平台运行?

  • 因为微软最早是没有开源,直到.NET Core 才开源,真正的跨平台的开始
    • 像.NET Framework 只支持Windows系统,太狭义了。
  • 微软的发展转折–> 云计算(Microsoft Azure—全球第二大云计算厂商)
    • 按需付费
  • .NET Core为云而生
    • 不止于云,不止于Azure

NET Core的重要问题

什么是C#?

  • .NET中主要的开发语言

.NET Core是.NET Framework的升级版吗?

  • 尽管绝大部分用法没变,但是.NET Core不是.NET Framework的升级版,无法直接升级

  • 有人会觉得又被微软坑了?

    • .NET Framework白学了? 那倒没有,因为绝大多数用法没变
  • 之前可以用Mono让.NET Framework程序可以直接运行在LInux下。但有了Mono,为啥微软还搞了.NET Core呢?

    • .NET Framework历史包袱
      • 1.带着手铐脚镣长大的ASP.NET—MVC
        • 因为这是在这个底层逻辑上的MVC框架而已,底层太过于臃肿
      • 2.ASP.NET底层不支持很好的单元测试
    • Mono在移动端可以,但是现在服务器端几乎不用

.NET Framework的缺点
1、系统级别的安装,互相影响(比如补丁升级)
2、无法独立部署
3、ASP.NET和IIS 深度耦合
4、ASP.NET资源消耗大
5、非云原生

.NET Core的优点
1、支撑独立部署,不互相影响
2、彻底模块化
3、没有历史包袱,运行效率高
4、不依赖与IIS
5、跨平台
6、符合现代开发理念:依赖注入,单元测试等

不同之处

  • 1、不支持:ASP.NET WebForms、WCF服务器端、WF、.NET Remoting、Appdomain
  • 2、部分Windows-Only的特性 .NET Core,但是无法跨平台:WinForm、WPF、注册表、Event Log、AD等。

项目应该使用.NET Core开发吗?

  • 1、旧的.NET Framework项目没必要动
  • 2、用到了.NET Core中不支持的特性的不能动
  • 3、其他新项目都可以用.NET Core,已经足够成熟,社区也在全面转向.NET Core

.NET Standard是什么

.NET Standard介绍

  • 它是一个标准规范
  • 图解
    • 图解1

验证:.NET Standard只是标准,不是实现

  • 1、建.NET Standard类库项目,确认版本是2.0,建一个类,方法中打印typeof(FileStream).Assembly.Location
    • Standard
  • 2、分别建.NET Standard和.NET Core的控制台项目,添加对类库项目引用,并且调用
  • 3、用反编译工具ILSpy分别反编译VS中FileStream、.NET Framework和.NET Core运行中的。BeginRead方法实现以及定义有不同
    • 反编译:程序集–>源代码
    • ILSpy不会默认展开方法细节
      • 所以可以在选项中打开
      • 展开细节1

Core-BeginRead和Framework-BeginRead的不同

不同1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Core
//在Standard规范的前提下,实现各自的方法逻辑
C:\Program Files\dotnet\shared\Microsoft.NETCore.App\5.0.17\System.Private.CoreLib.dll
E:\Projects\C-sharp\.NET Core2022 Study\CoreConsole1\bin\Debug\net5.0\TestLib1.dll


Framework
//在Standard规范的前提下,实现各自的方法逻辑
C:\Windows\Microsoft.NET\Framework\v4.0.30319\mscorlib.dll
E:\Projects\C-sharp\.NET Core2022 Study\FrameworkConsole1\bin\Debug\TestLib1.dll

NET Standard
//方法都是只有定义,但没有实现
C:\Users\Administrator\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\netstandard.dll
遇到的报错
  • 1、FrameworkConsole1 引用Standard类库时,框架版本不能低于4.7.2,要不然引用会出错
  • 版本1

总结

  • .NET Standard只是规范,一个.NET Standard类库可以被支持其版本的.NET Framework、.NET Core、Xamarin等引用。
  • 而.NET Core类库、.NET Framework类库则不可以被.NET Standard引用。
    • Standard版本支持
  • 如果编写一个公用的类库,尽量选择.NET Standard,并且尽量用低版本
  • .NET Framework支持到.NET Standard 2.0为止
    • 从.NET5开始,微软开始淡化其他叫法,统一为.NET。
      • 后续默认.NET就是指的.NET Core

P1-1 .NET Core概述
http://example.com/2024/08/21/Net Core2022教程/第1章:.NET Core入门-笔记/P1-1 .NET Core概述/
Author
John Doe
Posted on
August 21, 2024
Licensed under