当前位置: 首页 > 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 无法删除文件夹 —— 访问被拒绝 / 因为目录不是空的
  • 如何精准地用打印机在贺卡或邀请函上打字
  • 【翻译】Mashape是如何管理15000个API和微服务的(三)
  • co.js - 让异步代码同步化
  • Flex布局到底解决了什么问题
  • java B2B2C 源码多租户电子商城系统-Kafka基本使用介绍
  • JavaScript/HTML5图表开发工具JavaScript Charts v3.19.6发布【附下载】
  • Js实现点击查看全文(类似今日头条、知乎日报效果)
  • node.js
  • October CMS - 快速入门 9 Images And Galleries
  • select2 取值 遍历 设置默认值
  • sessionStorage和localStorage
  • Sublime text 3 3103 注册码
  • 从零开始的无人驾驶 1
  • 翻译:Hystrix - How To Use
  • 关于List、List?、ListObject的区别
  • 前端
  • 前端性能优化——回流与重绘
  • 转载:[译] 内容加速黑科技趣谈
  • 如何正确理解,内页权重高于首页?
  • 正则表达式-基础知识Review
  • # centos7下FFmpeg环境部署记录
  • (1)(1.13) SiK无线电高级配置(五)
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (C#)获取字符编码的类
  • (C语言)二分查找 超详细
  • (DFS + 剪枝)【洛谷P1731】 [NOI1999] 生日蛋糕
  • (poj1.2.1)1970(筛选法模拟)
  • (python)数据结构---字典
  • (分布式缓存)Redis分片集群
  • (附源码)spring boot公选课在线选课系统 毕业设计 142011
  • (考研湖科大教书匠计算机网络)第一章概述-第五节1:计算机网络体系结构之分层思想和举例
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (四)汇编语言——简单程序
  • (转)es进行聚合操作时提示Fielddata is disabled on text fields by default
  • (转)setTimeout 和 setInterval 的区别
  • (转)从零实现3D图像引擎:(8)参数化直线与3D平面函数库
  • ***检测工具之RKHunter AIDE
  • .bat批处理(一):@echo off
  • .NET Remoting Basic(10)-创建不同宿主的客户端与服务器端
  • .net 写了一个支持重试、熔断和超时策略的 HttpClient 实例池
  • .NET/C# 使窗口永不获得焦点