ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Framework、Standard和Core

2021-03-01 17:03:01  阅读:257  来源: 互联网

标签:类库 Core Configuration System Standard Framework NET dll standard



基本概念

  它们均可称为.NET的某种实现,只不过standard只有类库(并且framwork只支持到standard2.0,以及2.1后standard不再更新)


  .NET Framework仅面向Windows平台,主要包含两部分:公共语言运行时(CLR)和.NET Framework类库(核心为mscorlib.dll,当然还有其他的基础类库比如System.Configuration.dll等)

  .NET Core是.NET Framework(从4.5开始)的跨平台开源版本,也有它的运行时(.NET core runtime)和它的类库(核心System.Runtime.dll,其他类库比如System.Configuration.ConfigurationManager.dll)

  .NET Standard实际是一套标准。目的是建立能用于各种.NET的dll。目前framework、core等等都有各自对这套标准的实现,但也都保留了自己原来的实现方式,所以慢慢standard变成了能被各种.NET引用的一套dll。


  可以自行建立.NET Framework的dll和exe,它们只能用于windows;

  也可以建立.NET Core的dll和exe,可以跨平台——并且据测试,部分性能有所提升;

  .NET Standard只能建类库,并且不支持WCF——但只要选择.NET Standard 2.0版本,就可以在framework与其他.NET间共享代码。

 

基础类库

  指的是.NET自带的那些基础类,比如System.String,System.Configuration.ConfigurationManager、System.IO.StreamReader等

  不论哪种.NET实现,这些类的命名空间是相同的,但所属的dll各不相同。

  比如同样是ConfigurationManager类,在所有版本里都位于System.Configuration命名空间,但是

  在.NET Framework版本中,它位于Sytem.Configuration.dll

  但在.NET Core版本中,它位于System.Configuration.ConfigurationManager.dll中

  而.NET Standard中不支持这个类(还没有完全标准化),它实际使用.NET Platform Extensions(似乎是把未来要标准化的先放这里)里的System.Configuration.ConfigurationManager.dll

 

依赖项

  .NET Framework依赖的dll必须是framework或standard类型;

  .NET Core依赖的dll必须是core或standard类型;

  .NET Standard只能依赖standard类型(加上别的也识别不出内容,编译找不到命名空间)。

 

  .NET Framework会将所有的依赖项平铺展开,并且在csproj文件中能看到所有引用;

  .NET Core和.NET Standard则只显示顶级类库(最直接的儿子),其余孙子在儿子中以层级的方式显示,csproj文件也只记录儿子(没有孙子);
  【换句话说】这两种.net中,没有一个地方能直观地看到所有引用。

 

  添加nuget包时,.NET Framework使用package.config平铺地记录所有nuget包,同时增加csproj的引用;

  而.NET Core和.NET Standard抛弃了package.config,它们在直接csproj文件中,以<PackageReference>的方式记录顶级包(只记儿子,不管孙子)

 

  不论哪种.net,如果引用的dll就在同sln内(三世同堂),则默认已包含该dll引用的子类库(孙子),不必额外处理;

  引入nuget包也一样,只不过framework会把所有子孙展平,而core和standard都只是记录直接儿子(在解决方案视图中,点开儿子就可以看到孙子);

  【但是】果是通过路径指定方式引用dll,那么它需要显式引用所有子孙。

  如果这个儿子是framework还好,因为他的csproj里有它需要的所有子孙;

  但如果这个儿子是core或者standard,想找全它的子孙可有点费事。

 

【我曾犯的错误】

  我有一framework版本的exe,它通过指定路径的方式引用了dll(儿子),这个儿子引用了ConfigurationManager。

  显然,当这个儿子是framwork版时,孙子得是System.Configuration.dll;而这个儿子是standard版时,孙子得变成System.Configuration.ConfigurationManager.dll。

 
  当我引用framework版的儿子时,一切都没问题(我自己是framework,而且由于framework实际内嵌了System.Configuration.dll,我没有添加任何孙子)

  但当我把儿子改为standard版的时,就报了没有程序入口点的异常。


  原因就是缺少这个孙子System.Configuration.ConfigurationManager.dll。

  我也除了这篇文档外,额外收获了没有程序入口点除了dll版本不对里边少方法,还可能是因为压根就没找到dll。。

 

标签:类库,Core,Configuration,System,Standard,Framework,NET,dll,standard
来源: https://www.cnblogs.com/xinpingqiyouhe/p/14464602.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有