.NET Standard和.NET Core区别?

这两个不都是跨平台吗,写dll的时候什么时候用.NET Core什么时候用Standard?有什么区别?好像.NET Core可以做的.NET Sta…
关注者
69
被浏览
90,766

14 个回答

最开始 .NET Framework 只支持 Windows,而 mono 是一个社区的跨平台实现,后来出了个 .NET Core 跨平台了,但是由于 .NET Core 和 mono、.NET Framework 是不同的,虽然 mono 能跑大部分的 .NET Framework 程序集,但是 .NET Core 不行;而 mono 也不能跑 .NET Core 的程序集,.NET Core 也不能跑 mono 和 .NET Framework 的程序集。

由于 .NET 对库函数的引用类似动态链接库,程序集内并不包含库函数的实现,只包含库函数的签名,然后运行的时候才去加载对应的有实现的程序集完成“链接”过程最后调用,于是 .NET Standard 就应运而生了。

.NET Standard 参考三个实现的情况,划定了一组 API 的子集,这组 API 在 .NET Framework、mono 和 .NET Core 上都有实现,然后使 .NET Framework、mono 和 .NET Core 都能加载 .NET Standard 程序集,这样当用户调用 .NET Standard 里的 API 的时候,会把调用转发到当前运行时的基础库的实现上。

这样一来,只要用户的代码基于 .NET Standard 编写,就能同时在 .NET Framework、mono、.NET Core 上跑了。

而如果要使用各自平台独有的 API 的话,则不能基于 .NET Standard 来编写代码,而需要基于 .NET Framework、.NET Core 或者 mono 来编写代码。

后来到了 .NET Standard 2.1 的时候,由于 .NET Framework 掉了队,不再新增新的功能,于是 .NET Standard 2.1 干脆不支持 .NET Framework 了,只支持 mono 和 .NET Core。

再后来 mono 和 .NET Core 完成了基础库的统一,变成了新的 .NET,于是 .NET Standard 的使命也结束了,只剩下一个统一的 .NET。

简单说,.net有多种实现:.net framework, .net core, .net 6, mono等,.net standard是这些实现的标准。不同的实现对.net standard 支持的程度不同。具体看下面:

在当前情况下,新建项目一般选.net6没什么问题。如果要兼容多个不同的实现,就得具体查上面的表了。.net standard 2.0是在兼容性与功能性上的最优解,而不是2.1。

为啥弄这么复杂呢,这得问M$了。刚弄出.net觉得LZ天下第一,所以自己亲儿子.net framework只支持windows。为了支持linux,一些厂商自己弄了个mono。后来发现不光没干过Java,还错失几波风口,终于急眼了玩了把大的,把.net core全部开源。现在是一个.net平台N个实现,又得再浪费时间合并。所以别觉得大厂有预见性上有啥过人之处,也就是钱多耐C而已。