当前位置: 首页 > news >正文

.NET Standard 的管理策略

.NET Standard 作为各大 .NET 的标准,我们有必要了解一下它是如何在各种 .NET 的实现之间履行自己的职责的。所以,本文会说说它的管理策略。


本文内容

    • 都有哪些 .NET Standard 的实现?
    • 标准在前还是实现在前?
    • 标准之内还是使用标准?
    • 并不一定都能实现的标准

都有哪些 .NET Standard 的实现?

目前 .NET Standard 的实现有这些:

  • .NET Core
  • .NET Framework
  • Mono
  • Unity
  • Xamarin

标准在前还是实现在前?

标准在前指的是先制定出 .NET Standard 的某个版本的标准,然后再由各个 .NET Standard 的实现去完成实现。而实现在前指的是待各个 .NET Standard 的实现完成某个版本的发布之后,.NET Standard 再进行新版本的发布,确保发布时所有实现都已有版本完成。

.NET Standard 采取的是后者——实现在前。

主要在于,如果 .NET Standard 的 API 先发布,那么很多开发者基于新 .NET Standard API 开发的应用可能根本就没有办法编译到 .NET 的各个实现,例如 Mono/Xamarin。

标准之内还是使用标准?

.NET Standard 的发布有两种不同的方式。

第一种,也是大家经常提及的一种,即要求各大 .NET 实现都内置的 API 集。当我们在项目文件中指定 TargetFrameworknetstandard 时,我们可以直接地原生地使用到的那些 API。

第二种,是通过 NuGet 包发布的基于 .NET Standard 标准实现的 TargetFramework 指定为 netstandard 的类库。不止微软通过这种方式发布了大量基于 .NET Standard 的类库,<nuget.org> 上大量流行的库也基本上都有生成基于 netstandard 的版本。而这种并不需要各大 .NET 实现对此做额外的发布都能够正常使用,因为这种发布到 NuGet 上的包本身已自带一份实现。

这两种不同的方式分别独立更新而互不影响。

并不一定都能实现的标准

.NET Standard 中的 API 并不一定都是能被各大 .NET 的实现来实现的,因为现实的运行环境总是有或多或少的限制。

典型的例子是——苹果 App Store 的应用商店不允许应用在运行时生成可执行代码,所以 Xamarin 的 iOS 版本就无法实现运行时代码生成的部分标准。


参考资料

  • standard/README.md at master · dotnet/standard

我的博客会首发于 https://blog.walterlv.com/,而 CSDN 会从其中精选发布,但是一旦发布了就很少更新。

如果在博客看到有任何不懂的内容,欢迎交流。我搭建了 dotnet 职业技术学院 欢迎大家加入。

知识共享许可协议

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名吕毅(包含链接:https://walterlv.blog.csdn.net/),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系。

相关文章:

  • 如何在 .NET/C# 代码中安全地结束掉一个控制台应用程序?通过发送 Ctrl+C 信号来结束
  • Windows 10 应用创建模糊背景窗口的三种方法
  • 使用 PInvoke.net Visual Studio Extension 辅助编写 Win32 函数签名
  • 程序员与英语:即时聊天中的英语缩写 lol / lmao / idk
  • 使用 IFTTT 做 RSS 的邮件订阅服务
  • .NET/C# 使窗口永不激活(No Activate 永不获得焦点)
  • 语法高亮不够漂亮?这里有你想要的 Rouge 主题
  • 理解 UWP 视图的概念,让 UWP 应用显示多个窗口(多视图)
  • UWP 扩展/自定义标题栏的方法,一些概念和一些注意事项
  • 图片点击放大,你的网页也能做到!
  • UWP 应用中 CoreApplication / Application, CoreWindow / Window 之间的区别
  • 使用 C# 代码创建快捷方式文件
  • 发布了一款库(或工具包),如何持续地编写更新日志(ChangeLog)?
  • Windows 无法删除文件夹 —— 访问被拒绝 / 因为目录不是空的
  • 如何精准地用打印机在贺卡或邀请函上打字
  • cookie和session
  • CSS选择器——伪元素选择器之处理父元素高度及外边距溢出
  • CSS中外联样式表代表的含义
  • dva中组件的懒加载
  • ECMAScript入门(七)--Module语法
  • javascript 总结(常用工具类的封装)
  • JavaScript类型识别
  • LeetCode541. Reverse String II -- 按步长反转字符串
  • Redis在Web项目中的应用与实践
  • Swift 中的尾递归和蹦床
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • 复杂数据处理
  • 构造函数(constructor)与原型链(prototype)关系
  • 解析带emoji和链接的聊天系统消息
  • 如何打造100亿SDK累计覆盖量的大数据系统
  • 算法-插入排序
  • 项目实战-Api的解决方案
  • ​Linux·i2c驱动架构​
  • # Swust 12th acm 邀请赛# [ E ] 01 String [题解]
  • #include
  • #NOIP 2014# day.1 生活大爆炸版 石头剪刀布
  • #QT项目实战(天气预报)
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • (20)目标检测算法之YOLOv5计算预选框、详解anchor计算
  • (26)4.7 字符函数和字符串函数
  • (定时器/计数器)中断系统(详解与使用)
  • (转)c++ std::pair 与 std::make
  • (转)德国人的记事本
  • (转贴)用VML开发工作流设计器 UCML.NET工作流管理系统
  • **PHP二维数组遍历时同时赋值
  • .【机器学习】隐马尔可夫模型(Hidden Markov Model,HMM)
  • .bat批处理(一):@echo off
  • .gitignore
  • .net 4.0 A potentially dangerous Request.Form value was detected from the client 的解决方案
  • .NET 8.0 中有哪些新的变化?
  • .NET CORE 3.1 集成JWT鉴权和授权2
  • .NET Core使用NPOI导出复杂,美观的Excel详解
  • .net framework4与其client profile版本的区别
  • .NET 中 GetProcess 相关方法的性能
  • .net访问oracle数据库性能问题