前言

早上起来.NET社区沸腾了,期待已久的.NET Core 2.0终于发布!根据个人经验,微软的产品一般在2.0时会趋于成熟,所以一个新的.Net开发时代已经来临!未来属于.NET Core。

对于.NET Core 2.0的发布介绍,围绕2.0的开发生态,我想通过四篇文章(名称暂定):

  1. .NET Standard 2.0 特性介绍和使用指南

  2. .NET Core 2.0 特性介绍和使用指南

  3. ASP.NET Core 2.0 特性介绍和使用指南

  4. Entity Framework Core 2.0 特性介绍和使用指南

.NET Standard 2.0是基石,所以放在第一篇。

使用之前,下载安装.NET Core 2.0,下载地址。

.NET Standard 2.0 特性介绍

  • 代码共享:.NET Standard是API集合,更是代码实现标准,所有.NET实现必须符合该标准,防止代码碎片化。.NET Standard被设计用来作为替代可移植类库Portable Class Libraries(PCL)的构建工具。

  • API支持:在.NET Standard 2.0中API支持数量增多,包含API数量为32000个,.NET Standard 1.6 中API数量为13000个,目前为止已经包含.NET Framework中的大部分APIs,这意味着可以轻松地将现有代码移植到.NET Standard,从而使现有代码支持基于.NET Standard实现的任何平台,参看平台支持列表。

  • .NET Framework兼容模式:目前绝大多数的NuGet软件包使用.NET Framework,大多数项目被禁止引用到.NET Standard项目,因不是所有的项目依赖都支持.NET Standard,这是在.NET Standard 2.0中加入兼容模式的原因,使.NET Standard项目可以直接引用.NET Framework类库。目前70%的Nuget软件包是兼容.NET Standard 2.0,可能在某些特殊情况下不起会兼容失败,比如:WPF中的.NET Framework类库。

  • 平台支持

    • .NET Framework 4.6.1

    • .NET Core 2.0

    • Mono 5.4

    • Xamarin.iOS 10.14

    • Xamarin.Mac 3.8

    • Xamarin.Android 7.5

    • Upcoming version of UWP (预计今年下半年)

.NET Standard 2.0 使用指南

创建.NET Standard类库

通过创建一个新项目来实践一下,在VS中 文件 | 新项目 选择.NET Standard分类找到 Class Library (.NET Standard),项目名称为mylibrary

也可以通过命令行dotnet new创建一个类库(默认使用.NET Standard)

dotnet new lib -o mylibrary

为了让这个类库更加意义,编辑文件Class1.cs as,添加一行逻辑代码。

using System;namespace mylibrary{    public class Class1{         public static string GetMessage() => "Hello from .NET Standard!";}
}

使用.NET Standard类库

在使用类库之前,需要创建一个项目。创建一个空ASP.NET Core项目。在VS中,创建项目时在.NET Core分类中选择ASP.NET Core Web Application,选中ASP.NET Core 2.0,类型为Empty。

命令行创建

dotnet new web -o aspnetcore

使用.NET Standard类库的方式和使用其他类库一样,只需要在项目中添加引用。在VS中右键项目,点击添加/引用,然后在项目(Projects)选项卡中选择 mylibrary。

命令行方式为项目添加引用

dotnet add reference ../mylibrary/mylibrary.csproj

Startup.cs文件,添加代码

app.Run(async (context) =>
{    var message = mylibrary.Class1.GetMessage();    await context.Response.WriteAsync(message);
});

在VS中F5运行。

命令行工具运行

$ dotnet run
Now listening on: http://localhost:50878Application started. Press Ctrl+C to shut down.

运行效果

恭喜!创建的.NET Standard 2.0类库在.NET Core中调用成功。同样也可以在 .NET Framework或Xamarin等不同类型的应用中使用,方式一样。

重用现有.NET Framework类库

.NET Standard 2.0 提供兼容模式,现在添加一个非.NET Standard类型的NuGet包,如要添加NuGet包为:Huitian.PowerCollections,在VS中右键项目mylibrary,选择Manage NuGet Packages.,然后选择Browse,搜索Huitian.PowerCollections,在结果中找到包并点击安装。

命令行添加Nuget包

dotnet add package Huitian.PowerCollections

安装完包后,将显示以下警告:

NU1701: Package ‘Huitian.PowerCollections 1.0.0’ was restored using ‘.NETFramework,Version=v4.6.1’ instead of the project target framework ‘.NETStandard,Version=v2.0’. This package may not be fully compatible with your project.

这段警告不仅在安装包时提示,在每次构建时都会提示。

警告出现的原因是因为NuGet无法确定.NET Framework类库是否能够完全正常工作。例如,它可能依赖于Windows Forms(不跨平台)。建议测试应用程序,如果所有功能都按预期工作,您可以阻止警告。

编辑项目文件中包引用配置,添加NoWarn属性:

<ItemGroup>    <PackageReference Include="Huitian.PowerCollections" Version="1.0.0" NoWarn="NU1701" /></ItemGroup>

上面的配置是将Huitian.PowerCollections(版本:1.0.0)包引用时产生的警告名为NU1701设置为不提示。

在VS中直接在包的属性中进行设置

再次编译,不再提示警告信息。注意:配置只针对每个引用包,不是全局的。因此,如果引用了另一个需要兼容模式的库,将再次得到警告,需要对该包进行单独设置。

发布NuGet包

当类库开发完成,可以将其发布成NuGet包,在VS中,右键项目选择属性(Properties),在选项卡中找到Package,选中Generate NuGet package on build

在命令行工具环境下,编辑项目文件添加GeneratePackageOnBuild设置值为true

<PropertyGroup><TargetFramework>netstandard2.0</TargetFramework><GeneratePackageOnBuild>true</GeneratePackageOnBuild></PropertyGroup>

编译项目,在输出目录中会找到生成的NuGet包。

补充:关于可移植类库(Portable Class Libraries)

.NET Standard 2.0发布之后,在.NET项目中共享代码,不再推荐使用PCL类库,有可能后面会废弃,如果现在使用PCL应该移植为.NET Standard类库。

总结

.NET Standard 2.0 支持API数量是 .NET Standard 1.x 的两倍多,这意味着我们将.NET Framework 中的代码移植到.NET Standard变得更加顺畅,另外通过兼容模式在.NET Standard类库中可以引用.NET Framework项目或类库,这样允许在没有将所有代码移植到.NET Standard的情况下快速使用现有类库。(提供一个过渡措施,如果代码没有执行到不支持的API是不会出错的。)

几乎所有.NET平台都支持 .NET Standard 2.0,包括.NET Framework, .NET Core, 和 Xamarin(前身是Mono),UWP在今年稍后的时间会支持。所有这些实现得益于新增的API以及兼容模式,特别是.NET Core和UWP,他们以前只能使用一个受限的API集。

建议你将所有的业务逻辑和UI中依赖的代码转换成.NET Standard,能确保你的业务逻辑可以在任何平台被复用,比如桌面应用、移动应用、云应用。

更多参考资料

  • .NET Standard 2.0新增命名空间
    提供绘图API啦!

  • .NET Standard documentation

  • .NET Standard API

原文地址:http://www.cnblogs.com/YGYH/p/7364647.html


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

.NET Standard 2.0 特性介绍和使用指南相关推荐

  1. Entity Framework Core 2.0 特性介绍和使用指南

    前言 这是.Net Core 2.0生态生态介绍的最后一篇,EF一直是我喜欢的一个ORM框架,随着版本升级EF也发展到EF6.x,Entity Framework Core是一个支持跨平台的全新版本, ...

  2. ASP.NET Core 2.0 特性介绍和使用指南

    ASP.NET Core 2.0 发布日期:2017年8月14日 ASP.NET团队宣布ASP.NET Core 2.0正式发布,发布Visual Studio 2017 15.3支持ASP.NET ...

  3. .NET Core 2.0 特性介绍和使用指南

    前言 这一篇会比较长,介绍了.NET Core 2.0新特性.工具支持及系统生态,现状及未来计划,可以作为一门技术的概述来读,也可以作为学习路径.提纲来用. 对于.NET Core 2.0的发布介绍, ...

  4. hadoop3.0新特性介绍

    hadoop3.0新特性介绍 1. 基于jdk1.8(最低版本要求) 2. mr采用基于内存的计算,提升性能(快spark 10倍) 3. hdfs 通过最近black块计算,加快数据获取速度(块大小 ...

  5. 一起谈.NET技术,NHibernate 3.0.0.Alpha1 发布及新特性介绍

    发布 刚刚NHibernate的Leader--Fabio Maulo发布了NHibernate 3.0.0.Alpha1版本,这是NHibernate 3.0.0的第一个公开测试版本. 下载地址 你 ...

  6. 蚂蚁金服 SOFAArk 0.6.0 新特性介绍 | 模块化开发容器...

    SOFAStack Scalable Open Financial Architecture Stack 是蚂蚁金服自主研发的金融级分布式架构,包含了构建金融级云原生架构所需的各个组件,是在金融场景里 ...

  7. Node.js 4.0 中的 ES 6 特性介绍

    Node.js 4.0.0 已经发布了.这是和 io.js 合并之后的首个稳定版本,它带来了一系列的新特性,支持 ES 6的大部分特性.已经有很多ES 6 的特性介绍了,这里我们介绍一下该怎么使用它们 ...

  8. Portlet 2.0 新特性介绍(全)

    第一部分 Portlet 2.0 新特性介绍 ====================================================================== 关于本系列 ...

  9. RT-Thread V4.1.0 新特性介绍之TinyUSB

    TinyUSB 是一个用于嵌入式系统的开源跨平台 USB Host/Device 协议栈,其为了内存安全而设计,没有动态分配,同时也是线程安全的,所有中断事件都会被推迟,然后在非 ISR 任务函数中处 ...

最新文章

  1. 汉语是世界上唯一一种面向对象的高级语言
  2. fusioncharts相关问题
  3. 点击form 表单中的button导致页面刷新问题
  4. org.apache.catalina.connector.ClientAbortException: java.io.IOException: Broken pipe
  5. 转【微信小程序 四】二维码生成/扫描二维码
  6. jQuery操作iframe中js函数的方法小结
  7. Spring事务那些事儿
  8. 计算机一级资料书推荐,推荐版 全国计算机一级考试试题【史上最全面的资料,不看你就亏!】.doc...
  9. 线性回归的从零开始实现-08-p3
  10. 获取字符串全排列 或者 只输出k个的组合
  11. vue 下载文件的两种方法
  12. 龙芯芯片CPU的产品路线说明
  13. 我要换博客啦~Github+Hexo~Windows版本
  14. 【Faster R-CNN论文精度系列】原文精析
  15. sap Payment Terms Terms of payment 收付款条件
  16. PHP微信支付 curl请求https://api.mch.weixin.qq.com/pay/unifiedorder 返回空的解决方案
  17. Pycharm下同一目录py文件不能相互调用?
  18. 计算机专业项目化教学,中职计算机专业实训课项目化教学实践探索
  19. Mat结构及其它数据类型详解
  20. IEEE期刊论文格式(一)

热门文章

  1. Java Socke 探究
  2. 多线程介绍和多线程模块-lock-互斥锁
  3. linux服务之NIS
  4. .NET6之MiniAPI(八):日志
  5. Blazor中的无状态组件
  6. WPF 写一个提醒工具软件(完整项目)
  7. .Net Core with 微服务 - Consul 注册中心
  8. 快速弄懂陌生领域是一项“赚钱”的能力
  9. 全网最通透的“闭包”认知 · 跨越语言
  10. 在传统行业做数字化转型之最终篇