.NET Framework、 .NET Core、.NET Standard区别。

感谢书籍《ASP.NET Core 技术内幕与项目实战》及其作者杨中科。

.NET开发平台是:.NET Framework、 .NET Core、Xamarin/Mono的统称
.NET Framework 主要用于window平台下的程序开发。
.NET Core 主要用于跨平台程序开发。
.NET Standard只是规范,一个NET Standard类库可以被支持其版本的.NET Framework、NET Core、Xamarin等引用。
Xamarin/Mono 主要用于移动端开发,Mono也能做Web等跨平台开发,但主要专注移动端。
NET Core:免费、跨平台、开源,跨平台: 程序可以运行在Windows、Linux、 Mac等操作系统下。
Net Core为云而生不止于云,不止于Azure
尽管绝大部分用法都没变,但是.NETCore不是 .NET Framework的升级版,无法直接升级

NET Framework缺点:

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

NET Core时优点:

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

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

1)建.NET Standard类库项目,确认版本是2.0,建一个类静态方法中打印FileStream类实现类库的物理路径typeof (FileStream).Assembly.Location
新建 standard 类库,添加静态函数

public static String GetLibLocation()
{
       return  (typeof(FileStream)).Assembly.Location;
}

2)分别建.NET Framework和.NET Core的控制台项目,添加对类库项目引用,并且调用。
注意.NET Framework和.NET Core引用时.NET Standard类库支持版本。
在这里插入图片描述
.NET Standard只是规范,一个NET Standard类库可以被支持其版本的.NET Framework、NET Core、Xamarin等引用。而.NET Core类库、.NET Framework类库则不可以。如果编写一个公用的类库,尽量选择.NET Standard,并且尽量用低版本。

.net 官方文档:
Given many of the API additions in .NET Standard 2.1 require runtime changes in order to bemeaningful, .NET Framework 4.8 will remain on .NET Standard 2.0 rather than implement .NETStandard 21. .NET Core 3.0 as well as upcoming versions of Xamarin, Mono, and Unity will beupdated to implement .NET Standard 2.1.

右击项目下的依赖项。
.NET Framework、 .NET Core、.NET Standard区别。_第1张图片
在.net core 和.net Framework 下分别新建控制台程序:

  static void Main(string[] args)
{
           Console.WriteLine(standlab.Class1.GetLibLocation());
           Console.ReadKey();
  }

打印出路径如下:

.net Framework
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\mscorlib.dll

.NET Core
C:\Program Files\dotnet\shared\Microsoft.NETCore.App\5.0.15\CoreLib.dll

3)用反编译工具ILSpy (尽管开源) 分别反编译VS中FileStream、.NET Framework和.NETCore运行中的。BeginRead方法实现以及定义有不同

.net standard
// System.IO.FileStream
public override int ReadByte()
{
    throw null;
}
.net Framework

// System.IO.FileStream
using System.Security;

[SecuritySafeCritical]
public override int ReadByte()
{
    if (_handle.IsClosed)
    {
        __Error.FileNotOpen();
    }
    if (_readLen == 0 && !CanRead)
    {
        __Error.ReadNotSupported();
    }
    if (_readPos == _readLen)
    {
        if (_writePos > 0)
        {
            FlushWrite(calledFromFinalizer: false);
        }
        if (_buffer == null)
        {
            _buffer = new byte[_bufferSize];
        }
        _readLen = ReadCore(_buffer, 0, _bufferSize);
        _readPos = 0;
    }
    if (_readPos == _readLen)
    {
        return -1;
    }
    int result = _buffer[_readPos];
    _readPos++;
    return result;
}







.net core
// System.IO.FileStream
public override int ReadByte()
{
    PrepareForReading();
    byte[] buffer = GetBuffer();
    if (_readPos == _readLength)
    {
        FlushWriteBuffer();
        _readLength = FillReadBufferForReadByte();
        _readPos = 0;
        if (_readLength == 0)
        {
            return -1;
        }
    }
    return buffer[_readPos++];
}

如有引用请说明文章原地址,谢谢。
本文相关源码:
https://pan.baidu.com/s/1_6srRib9vItxBk6__d0wlA?pwd=ofew
提取码:ofew

你可能感兴趣的:(.net,6,.net,.netcore,asp.net)