zoukankan      html  css  js  c++  java
  • 通过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

  • 相关阅读:
    boost::asio在VS2008下的编译错误
    Java集合框架——接口
    ACM POJ 3981 字符串替换(简单题)
    ACM HDU 1042 N!(高精度计算阶乘)
    OneTwoThree (Uva)
    ACM POJ 3979 分数加减法(水题)
    ACM HDU 4004 The Frog's Games(2011ACM大连赛区第四题)
    Hexadecimal View (2011ACM亚洲大连赛区现场赛D题)
    ACM HDU 4002 Find the maximum(2011年大连赛区网络赛第二题)
    ACM HDU 4001 To Miss Our Children Time (2011ACM大连赛区网络赛)
  • 原文地址:https://www.cnblogs.com/TianFang/p/9127462.html
Copyright © 2011-2022 走看看