• 通过Windows Compatibility Pack补充.net core中缺失的api


    把项目往.net core上迁移的时候,一个最大的问题就是和.net framework相比,有一部分api缺失。它主要分为两类:

    • Windows 独有的api,如注册表
    • 未完成的功能,如System.Drawing

     Microsoft.Windows.Compatibility库极大的改善了这一问题。它对大部分常用的库都加以了补充。新增了了2万多api,如drawing, EventLog, WMI, Performance Counters, 和 Windows Services等这些常用的库都得到了较好的支持。

    根据MS的计划,到.net 3.0后,winform和wpf也会以扩展包的方式兼容到.net core中,到时候估计就彻底的取代.net framework了。

    但是,这个库其实包括十几个子库组成的,由于是扩展包,发布的时候也会多发布十几个dll,如果嫌发布的dll太多的话,也可以安装具体的子程序包。不知道以后微软是是否会像asp.net core那样发布一个runtime的安装包。

    windows独占api跨平台问题

    需要注意的是,一些扩展包的api是windows独占的。以注册表为例,虽然.net core提供了这些扩展的程序包,在windows上也运行正常,但由于.net core是跨平台的,这些库在linux或mac上是会抛异常的,因为这些系统根本没有注册表,无法支持。要解决这个异常,就涉及到了如下两个问题。

    首先,如何发现这些不能跨平台的api? 微软提供了 API Analyzer tool可以帮助我们快速发现这些api。

    其次,如何处理这些不能跨平台的api?如果需要我们的程序跨平台的话,一般有如下方法

    • 移除: 移除这些不能跨平台的功能
    • 替换: 使用能跨平台的功能替换它
    • 单独处理:对于windows平台,使用独占api,对于其它平台,使用其它方案替换。

    前面两种就不说了,第三种方案才是我们最常用的,这就涉及到另一个问题了:如何判断我们的程序处在哪个平台下。这里需要用到RuntimeInformation.IsOSPlatform这个api了,简单的示例如下:

        RuntimeInformation.IsOSPlatform(OSPlatform.Windows)
    

    限于篇幅所限,本文就介绍到这里,如果想对Windows Compatibility Pack有进一步的了解,可以参看官方文档Windows Compatibility Pack

  • 相关阅读:
    【原创】ASP.NET Web开发,实现打印Log日志,步骤详解
    [原创] ASP.NET WEBAPI 接入微信公众平台 总结,Token验证失败解决办法
    Mac安装Linux
    mac下终端的一些命令
    《Python程序设计》题库--摘
    Day 28 类的用法延伸
    Day 27 面向对象补充
    Day 24~26 类,面向对象,属性
    Q 91~100
    Q 81~90
  • 原文地址:https://www.cnblogs.com/TianFang/p/9127462.html
Copyright © 2020-2023  润新知