热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

本文翻译自ScottHanselman博客:https:www.hanselman.comblogWritingSmarterCrossplatformNETCore

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





推荐阅读
  • 在多线程并发环境中,普通变量的操作往往是线程不安全的。本文通过一个简单的例子,展示了如何使用 AtomicInteger 类及其核心的 CAS 无锁算法来保证线程安全。 ... [详细]
  • 在处理 XML 数据时,如果需要解析 `` 标签的内容,可以采用 Pull 解析方法。Pull 解析是一种高效的 XML 解析方式,适用于流式数据处理。具体实现中,可以通过 Java 的 `XmlPullParser` 或其他类似的库来逐步读取和解析 XML 文档中的 `` 元素。这样不仅能够提高解析效率,还能减少内存占用。本文将详细介绍如何使用 Pull 解析方法来提取 `` 标签的内容,并提供一个示例代码,帮助开发者快速解决问题。 ... [详细]
  • DAO(Data Access Object)模式是一种用于抽象和封装所有对数据库或其他持久化机制访问的方法,它通过提供一个统一的接口来隐藏底层数据访问的复杂性。 ... [详细]
  • 本文详细介绍了如何在 Android 应用中获取系统的版本号,包括具体的应用场景和实现步骤。 ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • 在对WordPress Duplicator插件0.4.4版本的安全评估中,发现其存在跨站脚本(XSS)攻击漏洞。此漏洞可能被利用进行恶意操作,建议用户及时更新至最新版本以确保系统安全。测试方法仅限于安全研究和教学目的,使用时需自行承担风险。漏洞编号:HTB23162。 ... [详细]
  • 本指南介绍了如何在ASP.NET Web应用程序中利用C#和JavaScript实现基于指纹识别的登录系统。通过集成指纹识别技术,用户无需输入传统的登录ID即可完成身份验证,从而提升用户体验和安全性。我们将详细探讨如何配置和部署这一功能,确保系统的稳定性和可靠性。 ... [详细]
  • 本文深入探讨了C#中的反射与特性功能。首先,介绍了反射的基本概念,即通过元数据(包括类的方法、属性和字段等)在运行时动态获取和操作程序信息的能力。此外,还详细解析了特性的使用方法及其在代码注解和元数据扩展中的重要作用,为开发者提供了丰富的编程技巧和实践指导。 ... [详细]
  • Spring Boot 中配置全局文件上传路径并实现文件上传功能
    本文介绍如何在 Spring Boot 项目中配置全局文件上传路径,并通过读取配置项实现文件上传功能。通过这种方式,可以更好地管理和维护文件路径。 ... [详细]
  • 本文介绍了如何使用 Node.js 和 Express(4.x 及以上版本)构建高效的文件上传功能。通过引入 `multer` 中间件,可以轻松实现文件上传。首先,需要通过 `npm install multer` 安装该中间件。接着,在 Express 应用中配置 `multer`,以处理多部分表单数据。本文详细讲解了 `multer` 的基本用法和高级配置,帮助开发者快速搭建稳定可靠的文件上传服务。 ... [详细]
  • 本文详细解析了客户端与服务器之间的交互过程,重点介绍了Socket通信机制。IP地址由32位的4个8位二进制数组成,分为网络地址和主机地址两部分。通过使用 `ipconfig /all` 命令,用户可以查看详细的IP配置信息。此外,文章还介绍了如何使用 `ping` 命令测试网络连通性,例如 `ping 127.0.0.1` 可以检测本机网络是否正常。这些技术细节对于理解网络通信的基本原理具有重要意义。 ... [详细]
  • 本文详细解析了Java类加载系统的父子委托机制。在Java程序中,.java源代码文件编译后会生成对应的.class字节码文件,这些字节码文件需要通过类加载器(ClassLoader)进行加载。ClassLoader采用双亲委派模型,确保类的加载过程既高效又安全,避免了类的重复加载和潜在的安全风险。该机制在Java虚拟机中扮演着至关重要的角色,确保了类加载的一致性和可靠性。 ... [详细]
  • 全面解析JavaScript代码注释技巧与标准规范
    在Web前端开发中,JavaScript代码的可读性和维护性至关重要。本文将详细介绍如何有效地使用注释来提高代码的可读性,并探讨JavaScript代码注释的最佳实践和标准规范。通过合理的注释,开发者可以更好地理解和维护复杂的代码逻辑,提升团队协作效率。 ... [详细]
  • 深入解析C#中app.config文件的配置与修改方法
    在C#开发过程中,经常需要对系统的配置文件进行读写操作,如系统初始化参数的修改或运行时参数的更新。本文将详细介绍如何在C#中正确配置和修改app.config文件,包括其结构、常见用法以及最佳实践。此外,还将探讨exe.config文件的生成机制及其在不同环境下的应用,帮助开发者更好地管理和维护应用程序的配置信息。 ... [详细]
  • 本文探讨了如何在C#应用程序中通过选择ComboBox项从MySQL数据库中检索数据值。具体介绍了在事件处理方法 `comboBox2_SelectedIndexChanged` 中可能出现的常见错误,并提供了详细的解决方案和优化建议,以确保数据能够正确且高效地从数据库中读取并显示在界面上。此外,还讨论了连接字符串的配置、SQL查询语句的编写以及异常处理的最佳实践,帮助开发者避免常见的陷阱并提高代码的健壮性。 ... [详细]
author-avatar
神话海青_769
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有