02020101 .NET Core入门01-学前说明、什么是.NET Core、.NET Core的重要问题
02020101 .NET Core入门01-学前说明、什么是.NET Core、.NET Core的重要问题
1. 学前说明(视频Part-0)
1.1 本课程不讲C#语言的基础
- 如循环、if语句怎么写、怎么定义一个类,C#怎么读写文件等等这些C#与.NET基础知识部分不会讲。
- C#语法、整个面向对象、面向过程等语法也不讲。
- 字符串、List、ArrayList、Dicitionary等基本数据结构不讲。
- 数据库、HTML、JavaScript等基础知识不讲,否则课程体系太大了。
1.2 本课程讲什么(.NET包含的一些高级的技术)
- 异步编程、Link、lamda表达式等重难点讲一下
- 日志、依赖注入、EFCore、ASP.NET Core
- 怎么做一个比较大的项目,DDD
1.3 本节课是补录的
- 在本课程录制的中期补录的本节课。
- 本课程ASP.NET部分前面是.NET 5的内容,提前已经录好。现在是2021年10月份,补录的本课程,微软将在下个月2021年11月份发布.NET Core 6正式版。
- 看视频的事件是2024年5月8日。.NET Core 6已经于2021年11月9日正式上线。
1.4 本次课程标题写的是.NET 6
- 课程标题今后甚至会改成.NET 7
- 本课程在讲ASP.NET之前,其实讲的都是ASP.NET 5的内容,因为在最开始录制的时候只有.NET5,甚至.NET 6还没出来。
- 在补充录制本课程的时候,微软已经出了.NET 6的候选版,在下个月会发布正式版。
- 本课程在我开始讲依赖注入,日志,EF Core等知识的时候还是用的.NET 5(配套的是Visual Studio 2019)。
- 因此在本课程在前期已经录制好的是.NET 5+VS 2019的内容,但是从ASP.NET Core那部分开始就是录制的.NET 6+VS 2022的知识。
1.5 本课程的内容
- 本课程不是微软文档的翻译,本课程主要是渗入一些微软文档里面没有的东西。
- 首先会将文档中的知识梳理出来,那些地方重要,不仅仅会教怎么用,而且会教你原理是怎么回事。这些会掰开了,揉碎了讲。
- 有些很少用到的东西,甚至有些东西是坑的,大家千万不能用的东西。本课程不会讲、如果是坑会给你指出来,一些在项目中不会用到的技术会指明了然后告诉你不能用。
1.6 本课程适用范围
- 本课程最重要是思想性的东西,这些是不变的东西,就算是到了.NET 10,我讲的内容还是适用的,这是我做课程的目标。
- 当你接触到这个视频的时候,说不定微软已经出了.NET 7、.NET8、甚至.NET 10了,我相信现在拿.NET 5讲的东西也会获益的。
- 不要在意版本的东西,版本没那么重要,.NET 3里面的东西在.NET 6里面也是可以一样用的。
- 当然,确实用的时候,你还是要特别注意,因为在.NET 6对应的VS 2022里面,新建项目的模板和.NET 5+VS 2019里面不一样了。后面我会教大家怎么去适应版本的问题。
1.7 关于.NET版本迭代太快了,学不动了啊的解答
-
首先:这是IT行业发展的客观规律,如果说一个知识,今年是这样,8年以后还是这样,那这个行业就没有发展了。
- 一个有发展的行业肯定是各种各样的新技术层出不穷的,如果说一个行业十年前是这样,十年后还是这样,那这个行业没有前途。
- 你既然选择了程序员这个行业,那就必须能够适应到这个行业的发展,否则你别干程序员了。可以考虑扫大街,十年前扫大街和现在扫大街是一样的。
-
其次:编程技术的发展,不同版本的出现都只是新增了一些特性,优化了之前的技术。
- 你之前学到的东西,到目前版本里面几乎都是可以正常使用的。
- 比方.NET 6对比.NET 5确实新出了一些东西,但是以前.NET 5里面大多数的东西在.NET 6里面可以直接用。
-
最后:版本的迭代只是增加了很少一部分新的特性,不要抱怨,程序员就应该如此。
- 假设.NET 5的知识面为100,但是到了NET.6里面可能多出了5,现在虽然是105,但是之前学习的100,或者之前学习100里面的99都能用,我们后续只需要学习改动的1和新增5即可。
-
不要抱怨这个,程序员就该如此。
2. 什么是.NET Core(视频Part1-1)
2.1 什么是.NET,什么是.NET Core?
-
.NET这个词大家应该听说的,.NET这个词之前的含义和现在(2021年)的含义是不一样的。
-
笼统的来讲,一直没有变的:.NET是微软提供的一个开发平台,.NET目前来讲(2021年)是.NET Framework、 .NET Core、Xamarin/Mono的统称,除了这三者之外,还有其它的内容暂不列举。
-
关于.NET Framework
- .NET Framework以前被简为称.NET,.NET Framework是基于Windows平台下开发的技术。很多人都说.NET开发的软件只能跑在Windows平台下是指的是.NET Framework开发的程序,这个已经有非常悠久的历史了。
- .NET Framework是最早.NET的称呼的拥有者,应该是在2001年发布的。很多人都是把.NET等同于.NET Framework,但是现在.NET是包含.NET Framework的。
-
关于.NET Core
- .NET Core是最近几年才新起的技术,跨平台的.NET开发技术。
- .NET Core是进行跨平台程序的技术。
-
关于Xamarin/Mono
- 这些主要是进行移动端开发,如手机App、移动(手机)游戏开发等应用
- Xamarin/Mono是进行移动(手机端)开发的技术。
-
总结:虽然.NET之前(2021年,本课程之前)是指.NET Framework,只能进行Windows平台开发,但是现在.NET是是包含.NET Framework实现Windows平台开发,同时包括.NET Core实现跨平台开发,也包含Xamarin/Mnon等实现移动端开发。
2.2 本套视频教程的内容
- 本套视频主要关注于.NET Core技术,.NET Core是一个免费、跨平台、开源的.NET开发技术。
- .NET Core跨平台的含义:程序可以运行在Windows、Linux、Mac等操作系统之下。因此不能再说.NET开发只能跑在Windows平台底下了,这是.NET Core非常重要的一个特性。
2.3 为什么程序要跨平台运行
-
对桌面操作系统而言:次要原因
-
目前桌面操作系统,Windows使用率最高。但是很多程序员习惯于使用苹果电脑,.NET Core因为跨平台的特性,就能跑在Mac OS系统之下。
-
很多人习惯在Mac OS系统+VS Code开发应用程序,正是因为.NET Core可以在苹果系统下运行了,因此诞生了MAC OS + .NET Core + VS Code开发的可能性。
-
-
对后台服务器而言:更重要的原因
- 很多网站的服务器都是Linux操作系统,而不是Windows服务器。
- 对于很多大型的网络公司,可能有成千上万台服务器,如果每每一台Windows服务器交一次钱,这个成本是非常大的。
-
对于中国环境而言
- 现在很多部门实行国产化,比如银行,军工等部门都不再用Window服务器,而是使用Linux服务器。
- .NET Framework开发的程序是一般情况下是无法在Linux服务器下跑起来的。
- 而.NET Core是可以在Linux服务器上运行的。
2.4 微软爱Linux梗
- 上图,是微软爱Linux
- 微软吹响了跨平台,拥抱Linux的号角。
2.5 Cloud Computing云计算
-
微软自从纳德拉上台之后,由于拥抱开源大力推广云计算技术,推广云计算概念,它的股价一路飙升。
-
什么是云计算
- 在传统年代开发一个软件,自己搞一个机房,塞几十上百台服务器进去。然后发现不够了,再买五台服务器放到机房里面。这个是传统软件开发的模式。
- 传统模式已经不适用新时代的要求,因为一个站点的业务量不再固定了。如淘宝平时只是需要1万台服务器,但是到双十一需要5万台,那么你是买5万台还是1万台?答案是5万台,因为在双十一必须要5万台。但是这增加的4万台在一年中的11.5个月是闲置的,会造成很大的浪费。
- 但是上述浪费了还好,因为双十一的时间是固定的,多花钱买服务器虽然浪费,却能确保网站的正常访问。但是例如微博,热点不知道啥时候引爆,突然来个热点发现服务器不够用了,导致站点崩了,这个是无法预测的,那就是更大的坑。
- 此时需要一个新的技术方向,云计算。
- 在某一个时间段提前给云计算厂家购买在某一个时间段的使用权限,只为这15天购买,这样成本下去了。
- 此外我还可以写一个程序,通过某一个算法感知某个热点要爆了,程序可以自动跟云计算厂商购买对应的服务器,对系统进行自动扩容,当感知热点下去了,程序自动发送释放买的服务器,这样只需要给这些某个时间段新增的服务器进行付费即可。
- 当然云计算不仅仅解决的是服务器数量的问题,可以自行去了解。
-
现在不再是自己买服务,自己建机房的阶段了。
-
在微软的Azure云之前有家公司叫亚马逊,有个叫做AWS的云平台,这个比微软飙升的还厉害。
- Azure现在是全球第二大云计算厂商(占全球20%),仅次于AWS,在某些国家和地区,Azure已经有赶超AWS的趋势。这些数据截止2021年10月份。
2.6 .NET Core就是为云而生的技术
- .NET Core为云而生、不止于云,不止于Azure。
3. .NET Core的重要问题(视频Part1-2)
3.1 什么是C#
- C#是编程语言,是.NET中主要的开发语言。
- .NET是一个开发平台,提供了运行时和一些类,但它不是一门语言。
- C#是一门在.NET平台下开发的编程语言,在.NET平台下还有很多其它的还发语言,比如F#,VB.NET,但是用的人很少。
- 就目前来说,C#几乎是.NET平台开发的唯一语言。
3.2 大家在学习本套课程的时候需要有C#语言基础。
- 本套课程不会讲C#语言基础,推荐书《C#图解教程》,《C#入门经典》
3.3 .NET Framework和.NET Core有什么区别
- 有些同学可能之前用过.NET Framework,这里我要给大家说清楚在.NET Framework时代,大部分学的东西包括类都没变,你作为一个.NET Framework开发者,你使用的绝大多数东西都没变。你之前怎么用,现在还是怎么用。
- 尽管大部分用法没变,但是.NET Core不是.NET Framework的升级版,无法直接升级。
- 直接拿着.NET Framework程序在.NET Core里面编译可能99%都能编译通过,只有1%无法编译。因此作为开发者你改变1%即可。虽然无法直接升级,但是只用关注这些升级部分即可。
- .NET Core虽然是.NET Framework的升降版,但是并不是说可以直接无缝升级。
3.4 又被微软坑了,.NET Framework白学了?
- 大家要有一个开放的心态,软件开发界一定是不断升级的。你比方说我学了一门技术,靠这个技术吃一辈子是不可能的,任何技术都是如此。
- 类比Python(2和3无法直接升级)、Java等都是如此,微软已经足够良心了,因为在.NET Framework时代学到的东西在.NET Core时代里面绝大部分都能用。
- 大家不要有怨妇心态,没白学,但是也要接受变化。
3.5 Mono技术
- 用Mono,在几年前有人研究过他,它是一个开源版本的.NET Framework。有了Mono,.NET Framework程序可以直接运行在Linux平台。
- Mono技术非常牛,微软现在也收购了Mono。包括进行游戏开发的Unity,包括进行手机端开发的Xamarin技术都是基于Mono的。
3.6 有了.NET Framework+Mono,微软为何还搞.NET Core?
-
.NET Framework系统级别的安装,互相影响。
- .NET Framework是一个系统级别的软件,假如我电脑上安装了.NET Framework 4.5,我电脑安装所有依赖于.NET程序都依赖于.NET Framework 4.5。
- 如果.NET Framework 4.5要打补丁了,那么与之有关的所有程序相当于都用了新的补丁。这样有些重新可能没问题,有些程序可能就崩溃了,大家互相影响,耦合程度非常高。
-
无法独立部署。
- 我用.NET Framework开发的程序无法打包一个安装包直接发给对方运行,对方电脑需要安装合适版本的.NET Framework,不然没法发过去对方直接双击就运行。
-
APS.NET是.NET Framework里面进行网站开发的技术,资源消耗大。
- ASP.NET与IIS深度耦合,ASP.NET内核里面很多与IIS相关的代码(IIS是Windows一个服务器),而IIS是很难移植到Linux平台的。
-
ASP.NET不满足云计算的要求。
- ASP.NET是十几年前的技术,那是几乎没有云计算的概念,不是一个为云而生的技术,有很多问题这里不展开讲。
-
.NET Framework历史包袱
- 带着手铐脚镣长大的ASP.NET MVC
- ASP.NET MVC是现在比较流行(2021年)进行网站开发的技术。
- 在ASP.NET MVC之前,微软最先搞出来的网站开发技术是ASP.NET WebForm,即拖控件开发网站的技术。后面微软基于ASP.NET WebFrom搞出来了一个轻量级的,符合现代软件开发理念的开发技术即ASP.NET MVC。
- 我在很多年前,我就知道拖控件技术一定会被淘汰。当年我在讲ASP.NET技术开发的时候,几乎把拖控件开发技术完全给删掉了,只是稍微讲了一下作为科普,我重点在讲MVC。
- 但是ASP.NET MVC是基于ASP.NET WebFrom基础之上的,ASP.NET MVC虽然本身很牛,但是它的底层还是拖控件这些东西,因此他是带着手铐脚镣的。
- 此外ASP.NET底层不能支持单元测试,依赖注入等新技术支持。
- ASP.NET因为底层都是一些拖控件,拖控件里面又是各种各样的历史包袱,导致运行效率很低。臭名昭著的就有“管道模型”等历史包袱。
- 带着手铐脚镣长大的ASP.NET MVC
-
ASP.NET底层不支持很好的单元测试
-
基于上述问题存在,即使通过Mono可以实现.NET Framework程序移植到Linux平台下,也等于继承了这些历史包袱,这些缺点它都有。
3.7 Mono一些观念
- Mono在移动端单纯,到了服务器端就走不动了。
3.8 .NET Core的优点
- 支持独立部署,不互相影响。
- 用.NET Core不需要全局安装一个.NET Core,程序可以自身打包成为一个独立运行的程序,不用安装直接拷贝过去就能运行。
- 彻底模块化
- 服务器上这个网站可以用.NET Core2.0,另外一个网站可以运行.NET Core3.1,他们都是模块化的,互不影响。
- 没有历史包袱,运行效率高。
- 不依赖与IIS
- 跨平台
- 符合现代开发理念:拥有依赖注入,单元测试等。
3.9 .NET CORE和.NET Framework有什么不同?
- .NET CORE不支持:ASP.NET WebForms,WCF服务器端,WF,.NET Remoting,Appdomain。(不支持的部分如果没有听说过就不要去管他,这些已经用的极少,甚至都淘汰了)。
- 用.NET CORE也可以开发一些只在Windows-Only(Windows平台)开发的一些特性,但是无法跨平台,比如:WinForm,WPF,注册表,Event Log,AD等Windows平台独有的技术。注意,如果你用.NET CORE使用了这些技术开发的程序只能跑在Windows平台底下。
- 也就是说用.NET CORE使用了一些Windows-Only技术,除了不能跨平台之外,在本小结6中提到的其它优点都可以实现。
3.10 我的项目可以用.NET CORE开发吗?
- 旧.NET Framework项目没必要动,继续用.NET Framework就可以了。
- 旧项目不要说迁移到.NET CORE,虽然说改动量不大,但是没有必要。
- 做过多年开发的人都知道,以前的东西运行的挺好的,你技术再好也不要动他。
- 用到了.NET Core中不支持的特性部分不能动。
- 新项目可以用.NET CORE,已经足够成熟,社区也在全面转向.NET CORE。
结尾
书籍:ASP.NET Core技术内幕与项目实战
视频:https://www.bilibili.com/video/BV1pK41137He
著:杨中科
ISBN:978-7-115-58657-5
版次:第1版
发行:人民邮电出版社
※敬请购买正版书籍,侵删请联系85863947@qq.com※
※本文章为看书或查阅资料而总结的笔记,仅供参考,如有错误请留言指正,谢谢!※

浙公网安备 33010602011771号