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

本文翻译自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还不支持



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/322603.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

P4562-[JXOI2018]游戏【数论,组合数学】

正题 题目链接:https://www.luogu.org/problemnew/show/P4562 题目大意 l∼rl\sim rl∼r的变化,每次访问第iii个那么iii的倍数就不用访问了。对于一个顺序sss,定义t(s)t(s)t(s)表示按这个顺序访问玩前t(s)t(s)t(s)个就都不用访问了。求所有顺序的t(s)t(…

Redis RDB文件格式全解析

转载自 Redis RDB文件格式全解析 点评 这篇文章作为对RDB理解的教程文章,对RDB文件的原理理解有助于进行Redis高阶应用的设计与开发。 文章转自:http://blog.nosqlfan.com/html/3734.html 作者:nosqlfan RDB文件是Redis持久化的一种方式…

实验进行中:.NET WebAssembly支持

目前四大主流浏览器都默认支持WebAssembly,而.NET社区也在继续推动为.NET开发者提供相关能力,来将他们的代码编译成WebAssembly,然后在浏览器上运行。WebAssembly是一种二进制web格式,旨在以接近原生的性能运行不是用JavaScript语…

Js对象如何添加方法、查看Api

js万物皆对象,要带着观察对象的眼观去看待每一个函数、变量。 为什么要用到原型? Es6以前,js中没有如ooa编程当中的class,但是要用到类,怎么办呢,构造函数就应运而生,但是构造函数里面添加方法…

Java web文件下载断点续传

一、下载文件请求 RequestMapping(value "/file/download")ResponseBodypublic Res download(HttpServletRequest request, HttpServletResponse response) {File file new File(request.getParameter("fileName"));if (file.exists()) {String range …

ajax面试技术回答模板

ajax是什么? 缩写、核心 1.ajax就是异步的 JS 和 XML 的缩写,目前我们一般用 JSON 代替 XML。 2.该技术最核心概念是 XMLHttpRequest 对象,该对象可发起 HTTP 请求,我们可以监听其 readystate 的变化获得响应。 怎么用&#xff…

微软人工智能和对话平台--知识商城体验

前言微软最新发布 知识商城了!这是一个人工智能和对话平台应用的场景。他可以让开发者带着想法 出做天马行空的创造性工作!你只需要稍微动动手,如:拖拽板块,就可以做到极致对答、代码自动生成!想象一下&…

P1375-小猫【卡特兰数】

正题 题目链接:https://www.luogu.org/problemnew/show/P1375 题目大意 东西两两绑在一起,要求绳子不能交叉,求方案数。 解题思路 0表示压入第i只猫,1表示弹出栈顶的猫并且和第i只猫绑在一起,这样就能保证不会交叉。 也就是卡特…

Spring @Import注解配置类方法内部调用没有注入属性值的坑

一、场景复现 application.yaml spring:application:name: config-testprofiles:active: devconfig:config-01:name: zhansancode: 001config-02:name: lisicode: 002导入配置类 Configuration Import(ImportConfig.class) public class Config {BeanConfigurationPropertie…

使用Xamarin开发手机聊天程序 -- 基础篇(大量图文讲解 step by step,附源码下载)

如果是.NET开发人员,想学习手机应用开发(Android和iOS),Xamarin 无疑是最好的选择,编写一次,即可发布到Android和iOS平台,真是利器中的利器啊!而且,Xamarin已经被微软收购…

P3441-[POI2006]MET-Subway【图论,贪心】

正题 题目链接:https://www.luogu.org/problemnew/show/P3441 题目大意 求III条路径最多可以覆盖树上多少个点。 解题思路 我们先只考虑叶子节点,显然可以覆盖min{num叶,I∗2}min\{num_叶,I*2\}min{num叶​,I∗2}。 然后网上递推,发现依旧是min{numi,…

ssm创建一个查询接口

注解: controller Autowiredprivate UserService userService;service实体类 Service("userService")Autowiredprivate UserMapper userMapper;mapper Repositorycontroller 接收数据 > service 逻辑中转 > dao 数据库查询 > domain bean类映…

Spring Boot 数据库连接池入门

转载自 芋道 Spring Boot 数据库连接池入门 本文在提供完整代码示例,可见 https://github.com/YunaiV/SpringBoot-Labs 的 lab-19 目录。 原创不易,给点个 Star 嘿,一起冲鸭! 1. 概述 在我们的项目中,数据库连接池基…

.net core 实现简单爬虫—抓取博客园的博文列表

一.介绍一个Http请求框架HttpCode.CoreHttpCode.Core 源自于HttpCode(传送门),不同的是 HttpCode.Core是基于.net standard 2.0实现的,移除了HttpCode与windows相耦合的api,且修改了异步实现,其余特性完全与…

P3216-[HNOI2011]数学作业【矩阵乘法,数学】

正题 题目链接:https://www.luogu.org/problemnew/show/P3216 题目大意 求1∼n1\sim n1∼n连起来%m\% m%m之后的值。 解题思路 我们可以考虑矩乘&#xff0c;但是当xxx位数时每次乘上10x10^x10x&#xff0c;所以我们对于不同位分开处理就好了。 codecodecode #include<c…

spring boot使用注解的方式整合mybaits

使用注解整和mybatis&#xff0c;不需要任何的xml注释&#xff0c;只需要在 SpringBootApplication 加上一行mapper的扫描文件即可 MapperScan("com.k1998.mybatis.mapper")在application.properties配置 server.port8000 server.context-path/test#编码格式 serv…

SpringBoot2.1.9 Mybatis由于@Mapper注解多数据源配置不生效问题

一、场景复现 &#xff08;1&#xff09;项目 目录 配置文件 spring:application:name: multi-datasourceprofiles:active: dev1datasource:type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.jdbc.Driverurl: jdbc:mysql://localhost:3306/base?…

使用Windows兼容包简化向.NET Core的迁移

从.NET迁移到.NET Core的一个主要原因&#xff0c;在于后者具备在Linux上运行的能力。但是对于大型企业应用&#xff0c;不可能实现一步迁移到位。由此&#xff0c;Microsoft推荐采用一种逐步迁移做法&#xff1a;第一步&#xff0c;迁移到ASP.NET Core&#xff08;依然使用.NE…

nssl1304-最大正方形【二分答案】

正题 题目大意 一个N∗NN*NN∗N的01矩阵&#xff0c;求一个面积最大的全为1的正方形 解题思路 先O(n2)O(n^2)O(n2)预处理hi,jh_{i,j}hi,j​表示在(i,j)(i,j)(i,j)这个位置向右有多少个连续的1。然后二分边长。 时间复杂度:O(n2logn):O(n^2\ log\ n):O(n2 log n) codecodecode…

springboot使用xml配置mybatis

前面用注解配置了mybatis&#xff0c;非常的简单&#xff0c;但是在写动态sql语句的时候会非常的麻烦&#xff0c;所以这边我们用xml来重新配置一下 在resource目录下新建 SqlMapConfig.xml 主配置文件 <?xml version"1.0" encoding"UTF-8" ?> &…