本文翻译自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.-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(,): warning PC001: Console.WindowWidth isn't supported on Linux, MacOSX [C:\Users\scott\Desktop\supercr
ossplatapp\supercrossplatapp.csproj]
supercrossplatapp -> C:\supercrossplatapp\bin\Debug\netcoreapp2.\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还不支持

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

  1. NET API 分析器

    NET API 分析器 https://www.hanselman.com/blog/WritingSmarterCrossplatformNETCoreAppsWithTheAPIAnalyzerA ...

  2. Microsoft Message Analyzer (微软消息分析器,“网络抓包工具 - Network Monitor”的替代品)官方正式版现已发布

    来自官方日志的喜悦 被誉为全新开始的消息分析器时代,由MMA为您开启,博客原文写的很激动,大家可以点击这里浏览:http://blogs.technet.com/b/messageanalyzer/a ...

  3. Android MultiDex兼容包怎么使用?

    在Android系统中安装应用的时候,需要对Dex进行优化,但由于其处理工具DexOpt的限制,导致其id的数目不能够超过65536个.而MultiDex兼容包的出现,就很好的解决了这个问题,它可以配 ...

  4. Google的兼容包问题【转】

    转自:http://blog.sina.com.cn/s/blog_3e28c8a50101g14g.html 项目之前好好的,今天开Eclipse,,出错. 错误Error retrieving p ...

  5. Microsoft Message Analyzer (微软消息分析器,“网络抓包工具 - Network Monitor”的替代品)官方正式版现已发布

    Microsoft Message Analyzer (微软消息分析器,“网络抓包工具 - Network Monitor”的替代品)官方正式版现已发布 来自官方日志的喜悦 被誉为全新开始的消息分析器 ...

  6. 关于appcompat_v7兼容包的详细说明

    1.appcompat_v7包的由来? appcompat_v7是Google提供的向下兼容包,是针对API level 7(Android2.1)及以上版本所开发的,其作用是为了让兼容低版本API( ...

  7. android v4兼容包

    一句话解释android兼容包就是:支持更多的组件,样式更好看了.好粗糙的解释啊! 我们都知道Android一些SDK比较分裂,为此google官方提供了Android Support Library ...

  8. [转*译]Networking API Improvements in Windows 10

        在当今,以云优先,移动优先技术为宗旨的时代下,大多数Apps都至少有一些与web服务或网络上其他设备的集成.这些包括应用程序,它获取天气在线内容,新闻或体育比赛的分数,媒体或下载的播客,甚至对 ...

  9. 如何安装 Microsoft Office 兼容包,以便您可以在早期版本的 Microsoft Office 中打开和保存 Office Open XML 格式

    https://support.microsoft.com/zh-cn/kb/923505 针对 Office 2003 的支持已终止 Microsoft 已于 2014 年 4 月 8 日终止了针对 ...

随机推荐

  1. 推荐使用国内的豆瓣源安装Python插件

    以前都是用pip安装Python插件的,直到今天 pip的原理其实是从Python的官方源pypi.python.org/pypi下载到本地,然后解包安装 但是有的时候,这个操作会非常慢,国内可以通过 ...

  2. QT---实现小球游戏(零基础入门)

    本文章基本全代码敲窗口小球游戏,最后会免费加上源代码,让读者有更清晰的了解 内容主要覆盖: 1> Qtimer计时器的开始和结束,以及显示系统时间等等... 2> 多个Qwidget布局和 ...

  3. 火狐浏览器打开html文件,中文乱码

    当html文件为: 解决方法: 将   <meta http-equiv="Content-Type" content="text/html; charset=UT ...

  4. Model Representation and Cost Function

    Model Representation To establish notation for future use, we’ll use x(i) to denote the “input” vari ...

  5. Zernike不变矩

    1.Zernike矩介绍 Zernike矩是基于 Zernike多项式的正交化函数,所利用的正交多项式集是 1个在单位圆内的完备正交集.Zernike矩是复数矩 ,一般把 Zernike矩的模作为特征 ...

  6. 写出易于调试的SQL

    1.前言 相比高级语言的调试如C# , 调试SQL是件痛苦的事 . 特别是那些上千行的存储过程, 更是我等码农的噩梦. 在将上千行存储过程的SQL 分解到 C# 管理后, 也存在调试的不通畅, 如何让 ...

  7. Linux系列教程(十二)——Linux软件包管理之yum在线管理

    上一篇博客我们介绍了rpm包管理之rpm命令管理,我们发现在使用rpm命令手动安装rpm包的时候,会发现安装遇到到的依赖让你痛不欲生,安装一个rpm时会要先先安装某个依赖的rpm,而安装这个依赖的rp ...

  8. css 权重 特殊性

    选择器的特异性由 CSS2 规范定义如下:     !important的规则比其他的权值都大     p{color: red !important} 如果声明来自于“style”属性,而不是带有选 ...

  9. 「Vue」起步 - vue-router路由与页面间导航

    vue-router 我们知道路由定义了一系列访问的地址规则,路由引擎根据这些规则匹配找到对应的处理页面,然后将请求转发给页进行处理.可以说所有的后端开发都是这样做的,而前端路由是不存在"请 ...

  10. 建立LINUX服务器

    建立LINUX服务器:一. 下载UltraISO工具并用该工具制作LINUX启动U盘,制作步骤如下:http://www.linuxidc.com/Linux/2012-11/74695.htm [^ ...