- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章.Net Framework .Net .NET Standard的概念及区别由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
在未来.NET Framework或许成为过去时,目前还是有很多地方在使用的。这一套体系对于做C#的老coder应该是再熟悉不过了,新入坑的也就用不着费力去学习.
.NET Framework 是一种技术,支持生成和运行 Windows 应用及 Web 服务。 .NET Framework 包括公共语言运行时 (CLR) 和 .NET Framework 类库。 公共语言运行时是 .NET Framework 的基础。 可将运行时看作一个在执行时管理代码的代理,它提供内存管理、线程管理和远程处理等核心服务,并且还强制实施严格的类型安全以及可提高安全性和可靠性的其他形式的代码准确性.
.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 实现推出的一套正式的 .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.dllC:\Windows\Microsoft.NET\Framework\v4.0.30319\mscorlib.dllC:\Users\Administrator\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\netstandard.dll
我们将三个dll 用dnspy反编译下,找到FileStream,随便找一个BeginRead方法看下代码.
从上面三个结果对比可以看到.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的区别的资料请关注我其它相关文章! 。
原文链接:https://www.cnblogs.com/SunSpring/p/15047424.html 。
最后此篇关于.Net Framework .Net .NET Standard的概念及区别的文章就讲到这里了,如果你想了解更多关于.Net Framework .Net .NET Standard的概念及区别的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
平时很少在jquery中用到this。查看代码时发现用到了,就调试出this的值,心想原来如此。还是挺有用的。这里总结一下this与$(this)的区别和使用。 $(this)生成的是什么?
使用单例类和应用程序范围的托管 bean 来保存应用程序数据有区别吗? 我需要查找某些 JNDI 资源,例如远程 bean 接口(interface),因此我为自己编写了一个单例来缓存我的引用并且只允
如果您仔细查看包含的图片,您会注意到您可以使用 Eclipse IDE 重构 Groovy 代码并将方法转换为闭包,反之亦然。那么,闭包到底是什么,它与方法有什么不同呢?有人可以举一个使用闭包的好例子
vagrant box repackage有什么区别( docs ) 和 vagrant package ( docs )? 我意识到 vagrant package仅适用于 VirtualBox 提
我想看看是否有人可以解释为什么以下代码适用于 valueOf 但不适用于其他代码。 import java.math.BigDecimal; public class Change { publ
这个问题已经有答案了: 已关闭12 年前。 Possible Duplicates: What is Closures/Lambda in PHP or Javascript in layman te
This question already has answers here: Vagrant, Docker, Puppet, Chef (3个答案) 2年前关闭。 docker和chef有什么共同
以下代码在95%的机器上产生相同的输出,但是在几台机器上却有所不同。在 Debug模式下,输出: Changing from New to Fin OK 但在 Release模式下: Changing
////Creating Object var Obj; // init Object Obj= {}; 它们之间有什么区别两个? 有没有可能把它变成一个单行? 这样使用有什么好处吗?
我想找出定时器服务之间的区别。我应该使用哪个以及何时使用。我正在使用 Jboss 应用服务器。 1) java.ejb.Schedule。 @Schedule注解或配置自xml。 2) javax.e
我发现在 C++ 中可以通过三种不同的方式将对象传递给函数。假设我的类(class)是这样的: class Test { int i; public: Test(int x);
有什么区别。 public class Test { public static void main(String args[]) { String toBeCast = "c
如果我有一列,设置为主索引,设置为INT。 如果我不将其设置为自动递增,而只是将唯一的随机整数插入其中,与自动递增相比,这是否会减慢 future 的查询速度? 如果我在主索引和唯一索引为 INT 的
这两种日期格式有什么区别。第一个给出实际时间,第二个给出时间购买添加时区偏移值。 NSDateFormatter * dateFormatter = [[NSDateFormatter alloc]
如果有一个函数,请说foo: function foo() { console.log('bar'); } 那么在 JavaScript 中,从另一个函数调用一个函数有什么区别,如下所示: f
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 4 年前。 Improv
代码是什么: class Time { private: int hours; int minutes; int seconds; pu
我知道这是非常基本的,但有人介意解释一下这两个数组声明之间的区别吗: #include array myints; ...和: int myints[5]; ...以及为什么 myints.size
我学会了如何根据 http://reference.sitepoint.com/css/specificity 计算 css 特异性但是,基于this reference,我不明白伪类(来自c)和伪元
为什么在运行 2) 时会出现额外的空行?对我来说 1 就像 2。那么为什么 2) 中的额外行? 1) export p1=$(cd $(dirname $0) && pwd) #
我是一名优秀的程序员,十分优秀!