1 什么是.NET Core
.NET是开发平台,.NET Framework、.NET Core、Xamaarin/Mono的统称。
.NET Framework是只能在Windows上开发的技术
.NET Core是可以跨平台开发的技术
Xamaarin/Mono是移动端开发的技术
.NET Core:跨平台、免费、开源,可以在云计算上开发的技术
跨平台指的是:程序可以运行在Windows、Linux、Mac操作系统上
什么是云计算?
背景:传统软件开发中服务器部署是:搞个机房,买上100台服务器放里头。但事实上平常需要的服务器只要10台,只是偶尔的高峰期才需要100台,这就造成了浪费。
云计算:就是在网络上联系服务器厂商,来买多少服务器的多长时间的使用权限。就前面一个例子,我只需买10台服务器放机房,等某10天需要用100台服务器时,就远程联系厂家,购买他们90台服务器10天的使用权限,大大的节约了成本。.NET Core就是为云而生的技术
2 .NET Core的重要问题
.NET Framework与.NET Core中大部分类相同,但.NET Core不是.NET Framework的无缝升级,有1%的程序不能在这两个平台上都编译。
mono技术可以使.NET Framework在Linux上运行,但为什么微软还要推出.NET Core,因为:
. NET Framework缺点:
1、系统级别的安装,互相影响
2、无法独立部署
3、ASP. NET 和IIS深度耦合
4、ASP.NET资源消耗大
5、非云原生
.NET Framework历史包袱:
1、带着手铐脚镣长大的ASP. NET MVC
2、ASP. NET底层不支持很好的单元测试
NET Core的优点:
(1)支持独立部署,不互相影响;
(2)彻底模块化;
(3) 没有历史包袱,运行效率高
(4) 不依赖于IIS
(5)跨平台
(6)符合现代开发理念,依赖注入、单元测试等
.NET Core和.NET Framework不同:
(1).NET Core不支持:
ASP. NET WebForms. WCF服务务器端、WF、.NET Remoting、Appdomain
(2).NET core部分只能在Windows运行的,无法跨平台的技术:WinForm、WPF、注册表、Event Log、AD等。但是除了上述第5个跨平台优点不具有外,其他优点都具有。
3 .NET Standard
.NET Framework .NET Core笼统的称为.net,它们和Xamaarin必须遵守 .NET Standard标准,这个标准规定了.NET Framework和 .NET Core要有什么类,类中有什么方法,而.NET Framework和 .NET Core就需要负责怎么实现这些类,以及类中的方法。
虽然.NET Framework .NET Core和Xamaarin会有一些特殊的类,但也须遵守 .NET Standard标准
注意:
①NeT Standad只是规范,一个NET Standard类库可以被支持其版本的.NET Framework、NET Core、Xamarin等引用。
而.NET Core类库、.NET Framework类库则不可以。
如果编写一个公用的类库,尽量选择.NETStandard,并且尽量用低版本。因为它自身版本高的话,不能支持低版本.NET Framework、NET Core。
②NET Framework支持到.NET Standard 2.0为止
官方说明
从.NET 5开始,微软开始淡化其他叫法,统一为.NET,后续默认.NET就是指的. NET Core。
实操:
验证.NET Standard只是提供标准,不负责实现:
(1)新建.NET Standard类库项目,确认版本是2.0,建个类,方法中打印typeof (FileStream). Assembly. Location.
using System;
using System.IO;namespace TestLib1
{public static class Class1{public void Test() {Console.WriteLine(typeof(FileStream).Assembly.Location);//拿到FileStream的类型 所在的程序集 所在的磁盘空间位置}}
}
(2) 分别建.NET Framework和.NET Core的控制台项目,添加对类库项目引用,并且调用。
类库项目无法直接运行,在解决方案中新建一个.NET Core控制台项目还有一个.NET Framework控制台项目。然后它们都引用刚刚新建的.NET Standard类库项目
细节:.NET Standard有类库但是没有控制台,是因为它只是一个标准,不是实现。所以说类库可以符合一个标准,但是一个控制台无法通过.NET Standard来运行。
.NET Core控制台项目代码以及运行结果:
using System;
using System.IO;namespace ClassLibrary1
{public class Class1{public static void Test(){Console.WriteLine(typeof(FileStream).Assembly.Location);//拿到FileStream的类型 所在的程序集 所在的磁盘空间位置Console.WriteLine(typeof(Class1).Assembly.Location);}}
}
.NET Framework控制台项目代码以及运行结果:
using ClassLibrary1;
using System;namespace FrameworkConsole1
{internal class Program{static void Main(string[] args){Class1.Test();Console.ReadLine();}}
}
在.NET Standard类库项目中,查看FileStream定义,可以看到它所在的位置:
// C:\Users\31513\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\netstandard.dll
可以看出,三个项目中对于同一个FileStream的类型 所在的程序集 所在的磁盘空间位置不同,也就是它们在不同项目中属于不同程序集。
(3) 用反编译工具ILSpy(尽管开源)分别反编译VS中FileStream、.NET Framework和.NET Core运行中的。BeginRead方法实现以及定义有不同。
反编译器ILSpy,能够将程序集转成源码。现在看下同一个FileStream的类型 所在的程序集的源码有什么不一样。
ILSpy下载地址:GitCode - 全球开发者的开源社区,开源代码托管平台
①通过反编译.NET Standard中的程序集得到的源码看到:
有很多的方法和类,但是没有方法体,都是空的,并且上方有提示:只含源数据,不包含可执行代码。
结论:只有定义,没有实现
②通过反编译.NET Core中的程序集得到的源码看到:
③通过反编译.NET Framework中的程序集得到的源码看到:
结论:后两个对方法都有实现,部分同一个方法实现会有点不同。
4 .NET开发环境安装配置
.NET 开发工具:
(1). NET CLI: 命令行
(2) Visual Studio: Windows-Only(推荐)
(3)Visual Studio for Mac
(4)Jetbrains Rider: 收费
(5) VS Code(Visual Studio Code) :跨平台
微软文档地址:下载 .NET(Linux、macOS 和 Windows)
(建议多看文档,提高自学能力)
安装了.net,就自带1). NET CLI,可以用cmd命令行来敲代码装佬,
dotnet --version 查看版本
dotnet new console//在当前文件夹建立一个控制台项目
dotnet run 构建并运行
详细可见官方文档“.NET CLI”部分
以下是实操截图:
查文档,看所需命令
5 .NET项目结构及程序发布
csproj项目文件
这是.NET Core的csproj文件,csproj文件是项目文件,主要描述一些项目的信息,描述是什么类型的项目、用的net版本号……
(可以在vs双击进行修改)
这是.NET Framework的csproj文件,复杂了很多。项目引用了哪些程序集、有哪些源代码文件、描述是什么类型的项目、用的net版本号……
(不可以在vs双击进行修改,只能在文件夹中修改,容易出错,不建议改)
包含这个项目所有的文件
注意点:
在.NET Framework中,移除某个文件后,该文件就不会出现在csproj项目文件中。
在.NET Core中,移除某个文件后,该文件才会出现在csproj项目文件中。因为它默认包含所有已有的文件,但移除某个文件后,会在csproj项目文件显式表现出
例:在.NET Core中,移除Class.cs文件,可以在csproj项目文件看到:
程序的发布
程序发布后,可以把那个包在别的电脑上运行
部署模式中,
选依赖框架,则要在目标计算机上安装.net运行环境。
选独立,则不用在目标计算机上安装.net运行环境,它生成的包里就含有.net运行环境。
一般都选独立,可以达到多个项目互不干扰。
目标运行时:
选可移植,则可兼容各个操作系统。也可选具体操作系统。
还有这文件发布选项,
生成单个文件:避免出现一大堆文件,会以几个个文件夹形式呈现
启用Ready ToRun编译:会提高启动速度,降低编译速度。
裁剪未使用的代码: 将用不到的程序集不打包
启用Ready ToRun编译、裁剪未使用的代码都有缺点,用到时可查看官方文档了解。