.Net学习

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.

cs 复制代码
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控制台项目代码以及运行结果:

cs 复制代码
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控制台项目代码以及运行结果:

cs 复制代码
using ClassLibrary1;
using System;

namespace FrameworkConsole1
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Class1.Test();
            Console.ReadLine();
        }
    }
}

在.NET Standard类库项目中,查看FileStream定义,可以看到它所在的位置:

cs 复制代码
// 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命令行来敲代码装佬,

cs 复制代码
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编译、裁剪未使用的代码都有缺点,用到时可查看官方文档了解。

相关推荐
A^mber2 天前
基于.NetCore 的 AI 识别系统的设计与实现
人工智能·.netcore
Jeffrey~~4 天前
.Net_比对Json文件是否一致
c#·json·.net·.netcore
吳所畏惧4 天前
C#轻松实现Winform监控文件夹变化以及监控文件新增、修改、删除、重命名等操作保姆级详细教程
开发语言·windows·c#·.net·.netcore
CS软件开发框架4 天前
C/S软件授权注册系统-轻量级WebApi服务器介绍
运维·服务器·visualstudio·c#·.net·.netcore
鸠摩智首席音效师5 天前
如何使用 Docker 容器化 .NET Core 应用程序 ?
docker·容器·.netcore
洱海之月5 天前
.Net Core框架创建一个Windows服务类型的应用程序
.netcore
洱海之月5 天前
.Net Core配置使用Log4Net日志记录
.netcore
张3蜂5 天前
.NET Core 各版本特点、差异及适用场景详解
asp.net·.net·.netcore
dot.Net安全矩阵5 天前
.NET 技术 | 调用系统API创建Windows服务
windows·安全·web安全·矩阵·.net·.netcore
洱海之月5 天前
.Net Core注册一个定制任务执行类服务
.netcore