.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 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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值