写点什么

.Net Core 及.Net Standard 主要概念回顾

  • 2016-10-09
  • 本文字数:1188 字

    阅读完需:约 4 分钟

在.Net Core 之前,选择编译目标是一个相对简单的操作。现在,开发人员面临多种可能,选择一个目标不再那么显而易见了。要想对.Net Core 有一个全面的了解,就要了解两个主要的概念:“目标框架别名(Target Framework Moniker)”和.Net Standard。

目标框架别名(TFM)

目标框架别名是.NET Core 中应用程序所针对的框架类型 + 版本号的 ID。我们可以把别名分成两个不同的类型:跨平台的目标.Net Standard 和平台实现,如.Net 4.6、.Net Core 1.0 和 Xamarin。

.Net Standard

.Net Standard 库是.Net Core 可移植性的核心。其目的是定义标准的 API 集。这些 API,如集合、线程、反射,是由.Net Core、.Net 4.5、Xamarin 和 Mono 等平台实现的。它们是开发人员用来构建自己的库和应用程序的基本构建块。

从 1.0 到 2.0,.Net Standard 的每个版本都定义了一组特定的库。下面的代码直观地展示了标准库和平台之间的关系

复制代码
interface INetStandard10
{
void Primitives();
void Reflection();
void Tasks();
void Collections();
void Linq();
}
interface INetStandard11 : INetStandard10
{
void ConcurrentCollections();
void InteropServices();
}
interface INetFramework45 : INetStandard11
{
// 特定于平台的 API
void AppDomain();
void Xml();
void Drawing();
void SystemWeb();
void WPF();
void WindowsForms();
void WCF();
}

CoreFx GitHub 库提供了所有 API 的列表及其相关的 netstandard 版本。

框架 / 运行时别名

除 netstandard 之外的别名是可以让应用程序在其中运行的、实际的运行时环境。对于新应用程序,常用的别名如下:

  • .NET Core - netcoreapp
  • .NET Framework - net
  • Universal Windows Platform - uap
  • Xamarin IOs - xamarinios
  • Mono Android - monoandroid

下面是一个简单的平台选择指南:

应用开发人员:编码应以 netcoreapp1.0、uap10.0、net452、xamarinios 等 TFM 为目标平台;

包 / 库作者:尽量以 netstandard 的最低版本为目标,那样可以在所有支持那个 netstandard 版本以及更高版本的平台上运行。

.Net Core 和 netcoreapp1.0 比较

虽然表面上看起来相似,但.Net Core 和 netcoreapp1.0 的意思完全不同。.Net Core 这个叫法中没有版本号,通常用于描述实现.Net 模块化、解决多个平台之间二进制兼容性问题的总体方案。但是,netcoreapp1.0 有更具体的意义。它是可以在 Windows、Mac OS 和 Linux 上运行的跨平台运行时的别名。简而言之,.Net Core 既可以指跨平台的方案,也可以指跨平台的运行时,这要视情况而定。

关于这一点,一个具体的应用场景是从 Asp.Net 迁移到 Asp.Net Core 时依赖项不支持.Net Core 的问题。如果只是想以.Net Framework 为目标平台,则这种迁移是可能的。例如,这让你可以使用Asp.Net Core,但仍然以.Net 4.6 为目标平台

查看英文原文 Reviewing Key Concepts in .Net Core and .Net Standard

2016-10-09 19:003751
用户头像

发布了 1008 篇内容, 共 373.8 次阅读, 收获喜欢 340 次。

关注

评论

发布
暂无评论
发现更多内容

百度地图开发-显示实时位置信息 04

Andy阿辉

android Android 小菜鸟 Android端 8月日更

JavaScript 有关数组的 slice 截断函数

HoneyMoose

模块(一)什么是架构

我是一只小小鸟

下载超过10万次?阿里大佬的《高并发、性能调优笔记》一战封神

Java架构师迁哥

太厉害了!腾讯T4大牛把《数据结构与算法》讲透了,带源码笔记

编程susu

Java 编程 程序员 计算机 技术宅

JS遍历循环方法性能对比:for/while/for in/for of/map/foreach/every

zhoulujun

foreach map for for in

ShardingSphere Proxy 初步体验

ShardingSphere-Proxy

微信业务架构

一叶知秋

架构实战营

客户需求难以推进和实现?企业如何有效管理项目需求?

优秀

项目管理

特斯拉依旧头铁坚持视觉路线,激光雷达会笑到最后吗?

脑极体

正经人一辈子都用不到的 JavaScript 方法总结 (一)

编程三昧

JavaScript 大前端 8月日更 模板字符串 String.raw

微信业务架构图-外包学生管理系统架构

毛先生

架构实战营

网络上数据通信过程

一个大红包

8月日更

数据挖掘经典算法之K-邻近算法(超详细附代码)

Python研究者

8月日更

每天学习10个实用Javascript代码片段(五)

devpoint

定时器 JavaScrip 8月日更

使用明道云搭建电梯维修与保养系统

明道云

Go,一文搞懂 defer 实现原理

微客鸟窝

Go 语言 8月日更

Linux之nc命令

入门小站

Linux

IntelliJ IDEA 如何显示提交输入的信息历史

HoneyMoose

混合模型与期望最大化算法(三)

数据与智能

算法 混合模型

本科毕业六年,裸辞备战三个月,四面阿里巴巴定级P7

编程susu

Java 编程 程序员 面试 计算机

从λ演算到函数式编程聊闭包(1):闭包概念在Java/PHP/JS中形式

zhoulujun

闭包 闭包函数

LeetCode刷题09-简单 回文数

ベ布小禅

8月日更

JIT-动态编译与AOT-静态编译:java/ java/ JavaScript/Dart乱谈

zhoulujun

dart JIT AOT 动态编译 静态编译

从λ演算到函数式编程聊闭包(2):彻底理解JavaScript闭包规则

zhoulujun

闭包 闭包函数

微信业务架构图 & 学生管理系统方案

缘分呐

架构 设计

在线JSON转YAML工具

入门小站

工具

微信业务架构和学生管理系统架构设计

Geek_db27b5

微信业务架构 学生管理系统架构

网络攻防学习笔记 Day115

穿过生命散发芬芳

网络安全 8月日更

实时数据引擎系列(二): 批流一体的数据

tapdata

模块一

树建

架构实战营

.Net Core及.Net Standard主要概念回顾_.NET_Pierre-Luc Maheu_InfoQ精选文章