应用Api深入分析器与Windows兼容包来编排智能的跨
分类:pc28.am

行使Api剖判器与Windows宽容包来编排智能的跨平台.NET Core应用,api深入分析器

正文翻译自Scott 汉斯elman博客:

正文:

那是前段时间这几周你应该清楚的一对.Net Core界的玄妙工具。我们在编写制定大概移植跨平台代码时,它们特别有帮扶。

.NET Standard 2.0 发布日期:二〇一七年6月二十23日
布告原来的小说地址

.NET API 分析器

首先是API 分析器。如您所知,有时候大家会境遇过时的API,只怕一个艺术你能够在Windows下采用,不过在Linux下却无法干活。API分析器是一个Roslyn(Roslyn是C#/.NET编译器的称呼)解析器,它能够很轻易地丰裕到你的种类,通过一个NuGet包。你所要做的就是增加那几个包,之后您将任何时候得到警报,恐怕波浪线表示API有标题。

探问这些差不离地例子。作者将生成三个简约地调节台应用,它早就加多了API解析器。注意那一个版本号是时下的,未来会退换。

C:supercrossplatapp> dotnet new console
C:supercrossplatapp> dotnet add package Microsoft.DotNet.Analyzers.Compatibility --version 0.1.2-alpha

 然后小编将利用三个不得不在Windows下使用的API。不过小编依旧愿目的在于任何平台下都能够运营。

static void Main(string[] args)

{

    Console.WriteLine("Hello World!");

 

    if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))

    {

        var w = Console.WindowWidth;

        Console.WriteLine($"Console Width is {w}");

    }

}

从此笔者动用“dotnet build”命令(可能运转命令,运维也蕴藏build动作)然后笔者获得了贰个名特别巨惠的警报,那些API不可能专业在具有平台下。

C:supercrossplatapp> dotnet build

Program.cs(14,33): warning PC001: Console.WindowWidth isn't supported on Linux, MacOSX [C:UsersscottDesktopsupercr

ossplatappsupercrossplatapp.csproj]

  supercrossplatapp -> C:supercrossplatappbinDebugnetcoreapp2.0supercrossplatapp.dll

Build succeeded.

.NET团队的Olia做了二个很好的YouTube摄像,她的录像呈现了API分析器是如何是好事的。API深入分析器的代码已经上传到Github。要是您意识了bug请在下边提issue!

前言

上午起来.NET社区沸腾了,期望已久的.NET Core 2.0好不轻松宣告!依据个体经验,微软的成品通常在2.0时会趋于成熟,所以一个新的.Net开拓时代已经到来!今后属于.NET Core。

对于.NET Core 2.0的揭橥介绍,围绕2.0的框架结构种类,本体系相关作品:

  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是内核,所以放在第一篇。

应用此前,下载安装.NET Core 2.0,下载地址。

.NET CORE的windows兼容包

第4个,.NET Core的Windows宽容包是七个很好的互补本事。当.NET Core 2.0费用成功并盛产后,它含有3.2万个很好地同盟现存.NET Framework代码的API。实际上,它们确实包容地充足好,小编事先能够很轻松地将三个15年前的.NET程序移植到.NET Core2.0上,这些进度中都从未有过碰到什么麻烦。

从.NET Standard1.6的1.3万个api到.NET Standard2.0的3.2万个API,他们扩大了一倍多的可用API

.NET Standard非常的炫耀,因为它援助如下平台:

  • .NET Framework 4.6.1

  • .NET Core 2.0

  • Mono 5.4

  • Xamarin.iOS 10.14

  • Xamarin.Mac 3.8

  • Xamarin.Android 7.5

当你迁移代码到.NET Core时会有大量的Windows平台特有的依赖,你只怕会蒙受有个别API在.NET Standard找不到的事态。那时,那一个新的NuGet包Microsoft.Windows.Compatibility(预览),它能够提供原先只在.NET Framework可用的API。

在那么些包容包里面包车型大巴API会包罗三种档案的次序。一种是这么些API原先正是Windows的一有的,可是也得以跨平台职业。其他一种是只好在windows下专门的工作,因为他俩是操作系统特有的。举个例子,API访问WIndows注册表那是Windows下独有的。然则System.Directory瑟维斯s恐怕System.Drawing他们却得以在其余平台都干活的很好。Windows包容包在.NET Core未来可用Api的底蕴上新添呢30000八个API。能够参阅Immol录像的录像。

难点在于,假使那些不可用API是您使用.NET Core的阻碍,那么今后你能够依赖宽容包,耶!不过你要通晓您为什么需求迁移到.NET Core。.NET Core与总体版.NET Framework都得以在Windows上行事。假设您的次第前段时间干活的很好,并且无需.NET Core的新特征,那么就不需求移植到.NET Core。那是平整列表:

使用.NET Core的情况:

  • 您有跨平台须要

  • 您的对象是微服务

  • 你使用Dorcker容器

  • 您有高质量与可开展需要

  • 您需求同步.NET版本

使用.NET Core的情况:

  • 您的顺序当前使用.NET Framework(推荐使用扩充来替代迁移)

  • 您的次第采用第三方.NET库恐怕NuGet包,它们的.NET Core版本还不可用

  • 你所采用的.NET技巧在.NET Core上还未曾帮衬

  • 你的程序所使用的操作系统平台近期.NET Core还不援助

.NET Standard 2.0 本性介绍

  • 代码分享:.NET Standard是API集结,更是代码完毕规范,全数.NET达成必需适合该标准,防止代码碎片化。.NET Standard被设计用来作为代表可移植类库Portable Class Libraries(PCL)的营造筑工程具。

  • API援助:在.NET Standard 2.0中API帮助数量加多,富含API数量为3两千个,.NET Standard 1.6 中API数量为1两千个,近年来截止已经包涵.NET Framework中的超过四分之一APIs,那代表能够轻巧地将现成代码移植到.NET Standard,进而使现成代码帮助基于.NET Standard完成的别的平台,参看平台支撑列表。

  • .NET Framework包容格局:近期超越八分之四的NuGet软件包使用.NET Framework,大非常多品类被明确命令禁止引用到.NET 斯坦dard项目,因不是享有的品种信任都帮助.NET 斯坦dard,那是在.NET 斯坦dard 2.0中参加宽容情势的由来,使.NET Standard项目方可一向引用.NET Framework类库。近年来十分九的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

图片 1

也得以经过命令行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 斯坦dard类库的点子和接纳任何类库同样,只供给在类型中拉长援引。在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.

运维效果

图片 2

恭贺!创建的.NET Standard 2.0类库在.NET Core中调用成功。同样也足以在 .NET Framework或Xamarin等不等品种的施用中运用,格局一样。

选取现成.NET Framework类库

.NET 斯坦dard 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中平素在包的习性中张开安装

图片 3

再次编写翻译,不再升迁警告消息。注意:配置只针对种种援引包,不是全局的。因而,假设援引了另三个急需相称方式的库,将另行赢得警告,须求对该包实行单独设置。

发布NuGet包

当类库开辟完结,能够将其透露成NuGet包,在VS中,右键项目选拔属性(Properties),在选项卡中找到Package,选中Generate NuGet package on build

图片 4

在命令行工具情形下,编辑项目文件增多GeneratePackageOnBuild设置值为true

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

编写翻译项目,在出口目录中会找到变化的NuGet包。

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

.NET 斯坦dard 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 斯坦dard的情景下高速利用现成类库。(提供贰个连贯形式,如若代码没有实践到不帮衬的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新增添命名空间
  • .NET Standard documentation
  • .NET Standard API

本文由pc28.am发布于pc28.am,转载请注明出处:应用Api深入分析器与Windows兼容包来编排智能的跨

上一篇:Linux内存查看工具,Linux监控工具介绍系列 下一篇:没有了
猜你喜欢
热门排行
精彩图文