大咖直播-鸿蒙原生开发与智能提效实战!>>> 了解详情
写点什么

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

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

关注

评论

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

精选算法面试-队列

李孟聊AI

算法 队列 28天写作

突然明白 npm install xxx 的业务实际用处

blueju

大前端 npm

synchronized只会用不知道原理?一文搞定

Java鱼仔

Java 面试 并发 synchronized

自动驾驶到底应该怎么实现?(28天写作 Day4/28)

mtfelix

自动驾驶 28天写作 智能电动车

技术人小故事-团队愿景篇-第4段

Ian哥

28天写作

原理竟然是这!GitHub上标星13k的《Android面试突击版》,醍醐灌顶!

欢喜学安卓

android 程序员 面试 移动开发

扫盲帖:聊聊微服务与分布式系统

AI乔治

Java 架构 微服务 分布式系统

我与你地铁高峰期的邂逅,背后竟然是?

脑极体

读《关于中台的思考与尝试》,我竟然懂得了这么多!

李忠良

中台 方法论

28 天带你玩转 Kubernetes-- 第四天(资源介绍)

Java全栈封神

Kubernetes k8s 28天写作 k8s教程 k8s资源

甲方日常 83

句子

工作 随笔杂谈 日常

hive JOIN操作分析

梧桐

在时间的缝隙里打了个盹「幻想短篇 4/28」

道伟

28天写作

Spring5.0源码学习系列之Spring AOP简述

AI乔治

Java spring 架构

数仓建设中最常用模型--Kimball维度建模详解

五分钟学大数据

大数据 数据仓库 数仓 维度建模

异步I/O -- posix aio 从入门到放弃的吐血实践

1412

workflow srpc 异步调度 posix aio kqueue

网线如何制作和如何使用?

Spring Boot 使用slf4j进行日志记录

武哥聊编程

Java springboot SpringBoot 2 slf4j 28天写作

【Mysql-InnoDB 系列】锁

程序员架构进阶

MySQL innodb 28天写作

我是如何在短期内快速掌握Dubbo的原理和源码的(纯干货)?

冰河

分布式 微服务 dubbo 系统架构 服务治理

记录一下我离线依赖迁移安装的具体尝试过程

blueju

JavaScript 大前端 npm Node webpack

三分钟快速详细安装CentOS

程序员的时光

Linux centos 程序员 28天写作

[2/28]保障业务转化为开发需求

L3C老司机

外行话之什么是好的游戏角色

Justin

28天写作 外行话 游戏设计

关于选择的复盘(part 1)

.

28天写作

影响DevOps和DevSecOps采用的7种趋势

啸天

安全 DevSecOps 应用安全

不可多得的干货!耗时两个礼拜,8000字安卓面试长文,内含福利

欢喜学安卓

android 程序员 面试 移动开发

Synchronized 精讲

伯阳

Java 多线程 高并发 synchronized java关键字

CSS ( Cascading Style Sheets )

roadup

CSS

漫谈分层架构:为什么要进行架构分层?

AI乔治

Java 架构 高可用系统的架构 高可用架构

【薪火计划】11 - 学习总结

码上生长

管理 28天写作

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