写点什么

.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:004575
用户头像

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

关注

评论

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

干货 | 五大关键点,帮助企业快速构建可落地的IT服务管理体系

嘉为蓝鲸

运维 嘉为蓝鲸 IT服务

干货 | 企业如何快速采集分析日志?

嘉为蓝鲸

运维 嘉为蓝鲸

Java递归实现评论多级回复

Jeremy Lai

递归 解决方案

MySQL更新锁表超时 Lock wait timeout exceeded

Jeremy Lai

事务隔离 Mysql死锁

深入理解Redis 数据结构—字典

Jeremy Lai

字典 redis 底层原理

详解MySQL隔离级别

Jeremy Lai

隔离级别

阿里云ECS后台CPU占用100%,top却找不到

Jeremy Lai

cpu 100% 阿里云;

小程序正式版报错600002 url not in domain list

Jeremy Lai

小程序

五种方式实现 Java 单例模式

Jeremy Lai

设计模式 单例模式

详解HashMap源码解析(上)

Jeremy Lai

HashMap底层原理

Centos7安装Nginx教程,一步安装http和https

Jeremy Lai

nginx Linux安装

详解ConCurrentHashMap源码(jdk1.8)

Jeremy Lai

ConcurrentHashMap 源码阅读

字节一面:说说TCP的三次握手

Jeremy Lai

三次握手 TCP协议

Seata 环境搭建

Jeremy Lai

分布式事务 seata

详解HashMap源码解析(下)

Jeremy Lai

HashMap底层原理

SpringBoot快速整合通用Mapper

Jeremy Lai

通用Mapper spring-boot

手把手教你用Java获取IP归属地

Jeremy Lai

IP地址

应用瓴羊Quick BI数据分析,实时掌控企业运营数据

对不起该用户已成仙‖

融云&艾瑞发布《政企数智办公平台行业研究报告》,解读数智化时代的办公新趋势

融云 RongCloud

即时通讯 办公 数智化

EMQ助力阿里云飞天洛神云网络构建新一代“亿级并发、百万级吞吐”NLB网络型负载均衡系统

EMQ映云科技

阿里云 物联网 IoT mqtt 12 月 PK 榜

瓴羊Quick BI带给企业新发展,企业数字营销和运营变得格外简单

对不起该用户已成仙‖

模拟HashMap冲突

Jeremy Lai

hashmap 哈希冲突

Java通过反射注解赋值

Jeremy Lai

解决问题 java注解

SpringBoot整合RabbitMQ实现六种工作模式

Jeremy Lai

spring-boot Rabbit MQ

后端程序员实现一个IP归属地的小程序

Jeremy Lai

Spring Cloud 整合 nacos 实现动态配置中心

Jeremy Lai

nacos 动态配置

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