.Net Core 2.0 生态(1).NET Standard 2.0 特性介绍和使用指南

.NET Standard 2.0 发布日期:2017年8月14日
公告原文地址html

前言

早上起来.NET社区沸腾了,期待已久的.NET Core 2.0终于发布!根据我的经验,微软的产品通常在2.0时会趋于成熟,因此一个新的.Net开发时代已经来临!将来属于.NET Core。git

对于.NET Core 2.0的发布介绍,围绕2.0的架构体系,本系列相关文章:github

  1. .Net Core 2.0 生态(1).NET Standard 2.0 特性介绍和使用指南(已发布)
  2. .Net Core 2.0 生态(2).NET Core 2.0 特性介绍和使用指南(已发布)
  3. .Net Core 2.0 生态(3)ASP.NET Core 2.0 特性介绍和使用指南(已发布)
  4. .Net Core 2.0 生态(4)Entity Framework Core 2.0 特性介绍和使用指南(已发布)

.NET Standard 2.0是基石,因此放在第一篇。web

使用以前,下载安装.NET Core 2.0,下载地址api

.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实现的任何平台,参看平台支持列表。app

  • .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类库。async

  • 平台支持
    • .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:50878
Application 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,能确保你的业务逻辑能够在任何平台被复用,好比桌面应用、移动应用、云应用。

更多参考资料

相关文章
相关标签/搜索