NET API 分析器

https://www.hanselman.com/blog/WritingSmarterCrossplatformNETCoreAppsWithTheAPIAnalyzerAndWindowsCompatibilityPack.aspx

http://www.cnblogs.com/huanent/p/8013221.html

本文翻译自Scott Hanselman博客:

https://www.hanselman.com/blog/WritingSmarterCrossplatformNETCoreAppsWithTheAPIAnalyzerAndWindowsCompatibilityPack.aspx

正文:

这是最近这几周你应该知道的一对.Net Core界的优秀工具。我们在编写或者移植跨平台代码时,它们非常有帮助。

.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:\Users\scott\Desktop\supercr

ossplatapp\supercrossplatapp.csproj]

supercrossplatapp -> C:\supercrossplatapp\bin\Debug\netcoreapp2.0\supercrossplatapp.dll

Build succeeded.

复制代码

.NET团队的Olia做了一个很好的YouTube视频,她的视频展示了API分析器是如何工作的。API分析器的代码已经上传到Github。如果你发现了bug请在上面提issue!

.NET CORE的windows兼容包

第二个,.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.DirectoryServices或者System.Drawing他们却可以在任何平台都工作的很好。Windows兼容包在.NET Core现在可用Api的基础上新增呢20000多个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 API 分析器的更多相关文章

  1. (翻译)使用Api分析器与Windows兼容包来编写智能的跨平台.NET Core应用

    本文翻译自Scott Hanselman博客: https://www.hanselman.com/blog/WritingSmarterCrossplatformNETCoreAppsWithThe ...

  2. 或许是你应该了解的一些 ASP.NET Core Web API 使用小技巧

    一.前言 在目前的软件开发的潮流中,不管是前后端分离还是服务化改造,后端更多的是通过构建 API 接口服务从而为 web.app.desktop 等各种客户端提供业务支持,如何构建一个符合规范.容易理 ...

  3. .NET Core 学习资料精选:入门

    开源跨平台的.NET Core,还没上车的赶紧的,来不及解释了-- 本系列文章,主要分享一些.NET Core比较优秀的社区资料和微软官方资料.我进行了知识点归类,让大家可以更清晰的学习.NET Co ...

  4. DotNetCore知识栈

    #..NET Core提供的特性 1.开源.免费 2.轻量级.跨平台 3.组件化.模块化.IOC+Nuget.中间件 4.高性能 5.统一了MVC和WebAPI编程模型 a)  比如:ASP.NET ...

  5. .net core迁移实践:项目文件csproj的转换

    随着net core的不断更新和生产可用,越来越多的人把现有的应用迁移和部署到net core平台.本文将分享迁移过程中的一个环节,给大家做一下参考. 背景说明 先来介绍一下什么是SDK样式的文件结构 ...

  6. H3 BPM引擎API接口

    引擎API接口通过 Engine 对象进行访问,这个是唯一入口. 示例1:获取组织机构对象 this.Engine.Organization.GetUnit("组织ID"); 示例 ...

  7. Three.js + HTML5 Audio API 打造3D音乐频谱,Let’s ROCK!

    继续玩味之前写的音乐频谱作品,将原来在Canvas标签上的 作图利用Three.js让它通过WebGL呈现,这样就打造出了一个全立体感的频谱效果了. 项目详情及源码 项目GitHub地址:https: ...

  8. 开大你的音响,感受HTML5 Audio API带来的视听盛宴

    话说HTML5的炫酷真的是让我爱不释手,即使在这个提到IE就伤心不完的年代.但话又说回来,追求卓越Web创造更美世界这样高的追求什么时候又与IE沾过边儿呢?所以当你在看本文并且我们开始讨论HTML5等 ...

  9. Web Audio API 实现音频可视化

    声明:本文为原创文章,如需转载,请注明来源WAxes,谢谢! 一转眼就已经有三个月没写博客了,毕业季事情确实多,现在也终于完全毕业了,博客还是不能落下.偶尔还是要写一下. 玩HTML5的Audio A ...

随机推荐

  1. zoj 3813 Alternating Sum(2014ACMICPC Regional 牡丹江站网络赛 E)

    1.http://blog.csdn.net/dyx404514/article/details/39122743 思路:题目意思很清楚了,这里只说思路. 设区间[L,R],区间长度为len=(R-L ...

  2. [acm]HDOJ 2059 龟兔赛跑

    题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=2059 起点和终点,共n+2个点,n+2个状态,简单DP即可. //11512698 2014-08- ...

  3. 洛谷 P2962 [USACO09NOV]灯Lights

    题目描述 Bessie and the cows were playing games in the barn, but the power was reset and the lights were ...

  4. [转]从onload和DOMContentLoaded谈起

    这篇文章是对这一两年内几篇dom ready文章的汇总(文章的最后会标注参考文章),因为浏览器进化的关系,可能他们现在的行为与本文所谈到的一些行为不相符.我也并没有一一去验证,所以本文仅供参考,在具体 ...

  5. 模拟select选择器

    <form method="post"> <div class="selectly" id="s1"> Select ...

  6. Behave + Selenium(Python) 二

    介绍feature, py文件和之间关系: example01.feature文件包括5行: Feature行: 介绍这个feature用来干什么的: Scenario行:介绍这个scenario用来 ...

  7. IOS深入学习

    iOS超全开源框架.项目和学习资料汇总(1)UI篇 iOS超全开源框架.项目和学习资料汇总(2)动画篇 iOS超全开源框架.项目和学习资料汇总(3)网络和Model篇 数据库 FMDB – sqlit ...

  8. try-catch-finally中return的执行情况

    在try中没有异常的情况下try.catch.finally的执行顺序 try--- finally 如果try中有异常,执行顺序是try--- catch --- finally 如果try中没有异 ...

  9. 浅谈HTML移动Web开发(转)

    一.响应式Web设计 PC端常用的两种布局方式就是固定布局和弹性布局,前者设置一个绝大多数电脑能征服显示的固定宽度居中显示,后者则采用百分百. 响应式布局意味着媒体查询,响应式web设计并非新的技术, ...

  10. 2.5玩转xargs

    我们可以利用管道将一个命令的stdout(标准输出)重定向到另一个命令的stdin(标准输入).有些命令只能以命令行参数的形式接受数据,而无法通过stdin接受数据流.这时候就没法使用管道.那么xar ...