.Net Framework .Net.NET Standard的概念及区别_实用技巧

来源:脚本之家  责任编辑:小易  
目录
.Net Framework .Net  .NET Standard的区别一、.NET Framework二、.Net三、.NET Standard三、实际操作说明

.Net Framework .Net  .NET Standard的区别

一、.NET Framework

在未来.NET Framework或许成为过去时,目前还是有很多地方在使用的。这一套体系对于做C#的老coder应该是再熟悉不过了,新入坑的也就用不着费力去学习。

.NET Framework 是一种技术,支持生成和运行 Windows 应用及 Web 服务。
.NET Framework 包括公共语言运行时 (CLR) 和 .NET Framework 类库。 公共语言运行时是 .NET Framework 的基础。
可将运行时看作一个在执行时管理代码的代理,它提供内存管理、线程管理和远程处理等核心服务,并且还强制实施严格的类型安全以及可提高安全性和可靠性的其他形式的代码准确性。

二、.Net

.net 就是由.net core 演进而来,在底层有很多性能和架构优化改造,上层应用api和用法和.NET Framework大多数相同。

.NET 是一种用于构建多种应用的免费开源开发平台,使用 .NET 时,无论你正在构建哪种类型的应用(web,api、桌面应用...),代码和项目文件看起来都一样。 可以访问每个应用的相同运行时、API 和语言功能。
NET 是开放源代码,使用 MIT 和 Apache 2 许可证。 .NET 是 .NET Foundation 的项目。
Microsoft 支持在 Windows、macOS 和 Linux 上使用 .NET。 它会定期更新以保证安全和质量。
.NET 支持三种编程语言:C#、F#、Visual Basic。

三、.NET Standard

.NET Standard 是针对多个 .NET 实现推出的一套正式的 .NET API 规范。 推出 .NET Standard 的背后动机是要提高 .NET 生态系统中的一致性。 但是,.NET 5 采用不同的方法来建立一致性,这种新方法在很多情况下都不需要 .NET Standard。

所以.net standard 是 .Net Api 规范,不是实现。其作用是为了提高.net 一致性,只要框架支持就能使用.net standard规范去实现。
但是!.NET 5 采用不同的方法来建立一致性,也就是说.net 5 开始过度到.net 框架如果你只是用于.net 框架的话,但是支持.net standard!(名字有点绕晕啊)
NET Standard并未弃用 对于可由多个 .NET 实现使用的库,仍需要 .NET Standard。比如在 .NET Framework 和 .NET 上都要使用的内库就需要按照.net standard规范,这样两个框架都能用,但是要看.net standard版本支持,下图对照。
在创建类库的时候就可以选择不同的支持框架。

 

各种 .NET 实现以特定版本的 .NET Standard 为目标。 每个 .NET 实现版本都会公布它所支持的最高 .NET Standard 版本,这种声明意味着它也支持以前的版本。

 

三、实际操作说明

1、创建一个.NET Standard 类库,添加一个简单的测试方法。

public class NetStandardTest
{
    public static void PrintLocation()
    {
        //打印FileStream 路径
        Console.WriteLine(typeof(FileStream).Assembly.Location);
        //打印NetStandardTest 路径
        Console.WriteLine(typeof(NetStandardTest).Assembly.Location);
    }
}

在这个测试方法里面我们加了两行打印代码。主要是打印FileStream路径,同时我们创建的.NET Standard类库为2.0,因为我们接下来要创建.net framework 的控制台,它不支持2.1。

2、创建.net 5,.net framework 4.6.1 控制台程序

创建好两个控制台项目,在主方法里面调用内库方法。

static void Main(string[] args)
{
    NetStandardTest.PrintLocation();

    Console.ReadKey();
}

解决方案结构如下

 

3、运行分析

 

从结果看我们看到同一个.NET Standard类库,引用在不同的框架上,调用同一个FileStream的地址是不一样的。
然后我们在.NET Standard类库里面F12定位到FileStream看到程序集如下

三个地址我们并列对比下:

C:\Program Files\dotnet\shared\Microsoft.NETCore.App\5.0.8\System.Private.CoreLib.dll
C:\Windows\Microsoft.NET\Framework\v4.0.30319\mscorlib.dll
C:\Users\Administrator\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\netstandard.dll

我们将三个dll 用dnspy反编译下,找到FileStream,随便找一个BeginRead方法看下代码。

.net standard

.net framework

.net 5

从上面三个结果对比可以看到.net standard里面是没有实现的,只是定义了方法,也就是说定义了一种标准,说明我的类里面有哪些东西。
调用的时候再根据我们当前使用的框架去找到对应框架的实现。这就是为什么.net standard能对多框架引用,也是为什么2.1不能被.net framework使用,因为它没有去实现2.1新增的api。
至于为什么我们调用.net standard的dll会被转到对应框架的dll呢,这是利用Type Forwarding方式实现跨程序集类型转移的技术成为“垫片(Shim)”,这是实现程序集跨平台复用的重要手段。
关于这个垫片技术可以看下这篇文章https://www.cnblogs.com/artech/p/how-to-cross-platform-03.html。

以上就是.Net Framework .Net  .NET Standard的概念及区别的详细内容,更多关于.Net Framework .Net  .NET Standard的区别的资料请关注真格学网其它相关文章!

您可能感兴趣的文章:基于Jenkins搭建.NET FrameWork持续集成环境简单了解.NET Framework.NET Core/Framework如何创建委托大幅度提高反射调用的性能详解Windows Server 2012 R2或2016无法安装.NET Framework 3.5.1的解决方法.NET framework 4.0 安装失败回滚问题安装.NET Framework进度条卡住不动的解决方案(推荐)基于.net standard 的动态编译实现代码Visual Studio 2017创建.net standard类库编译出错原因及解决方法

  • 本文相关:
  • 浅谈asp.net的postback 实例代码
  • asp.net gridview分页保存选项
  • asp.net实现的生成验证码功能示例【附demo源码】
  • aspxgridview custombuttoncallback 不支持弹出消息提示解决方法
  • .net设计模式之装饰模式(decorator)
  • 用扩展方法优化多条件查询(不定条件查询)
  • 超好用轻量级mvc分页控件jpager.net
  • dataset与datatable的区别示例介绍
  • asp.net ubb使用代码
  • 利用docker-compose搭建aspnetcore开发环境
  • net framework 4.0是什么
  • Mcrsosft.NET Framework 4.0
  • NET Framework 4.0不支持XP
  • 安装net framework 4.8 提示证书已被吊销?
  • Win10 Net FrameWork 3.5无法安装
  • xp系统应该安装哪个.net framework
  • microsoft.net framework4.0是什么啊能删除不啊
  • Microsoft.NET Framework 2.0是什么软件?
  • Microsoft .NET Framework 4.0 可以卸载吗
  • NET Framework初始化错误
  • 电脑每次关机,都有Microsoft.NET Framework阻止关机,怎么解决...
  • netframework是什么
  • Microsoft.NET.Framework 如何删除?
  • win8 .NET Framework安装问题
  • Microsoft.NET Framework异常
  • NET Framework软件的作用是什么?
  • microsoft.net framework3.5在哪下载
  • Microsoft.NET Framework3.5是什么东西?
  • .NET Framework 4是什么东西?
  • NET Framework4.0安装错误,其他应用软件无法安装或无法运行...
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全基础应用实用技巧自学过程首页asp.net实用技巧基于jenkins搭建.net framework持续集成环境简单了解.net framework.net core/framework如何创建委托大幅度提高反射调用的性能详解windows server 2012 r2或2016无法安装.net framework 3.5.1的解决方法.net framework 4.0 安装失败回滚问题安装.net framework进度条卡住不动的解决方案(推荐)基于.net standard 的动态编译实现代码visual studio 2017创建.net standard类库编译出错原因及解决方法浅谈asp.net的postback 实例代码asp.net gridview分页保存选项asp.net实现的生成验证码功能示例【附demo源码】aspxgridview custombuttoncallback 不支持弹出消息提示解决方法.net设计模式之装饰模式(decorator)用扩展方法优化多条件查询(不定条件查询)超好用轻量级mvc分页控件jpager.netdataset与datatable的区别示例介绍利用docker-compose搭建aspnetcore开发环境未将对象引用设置到对象的实例 (java正则表达式 pattern和matcheasp.net(c#)网页跳转七种方法小结未能加载文件或程序集“xxx”或它asp.net中的几种弹出框提示基本实asp.net“服务器应用程序不可用”asp.net gridview 72般绝技asp.net生成excel并导出下载五种asp.net对路径"xxxxx"system.runtime.interopservicesasp.net递归法求阶乘解决思路visual studio 2015和 .net core安装教程asp.net页面触发事件panel滚动条高度不变使用datagrid中扩展itemrenderer和headerclickonce diy全自动更新下载升级的自我实json.net日期格式化设置方式mvvm模式下wpf动态绑定展示图片asp.net json 序列化技术分析asp.net 在线文件管理asp.net配置kindeditor文本编辑器图文教程
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved