通过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。
通过Windows Compatibility Pack补充.net core中缺失的api的更多相关文章
- 在 .NET Core 中构建 REST API
翻译自 Camilo Reyes 2020年8月26日的文章 <Build a REST API in .NET Core> [1] REST API 可以使用简单的动词(如 POST.P ...
- EF Core中通过Fluent API完成对表的配置
EF Core中通过Fluent API完成对表的配置 设置实体在数据库中的表名 通过ToTable可以为数据模型在数据库中自定义表名,如果不配置,则表名为模型名的复数形式 public class ...
- 分析现有 WPF / Windows Forms 程序能否顺利迁移到 .NET Core 3.0(使用 .NET Core 3.0 Desktop API Analyzer )
今年五月的 Build 大会上,微软说 .NET Core 3.0 将带来 WPF / Windows Forms 这些桌面应用的支持.当然,是通过 Windows 兼容包(Windows Compa ...
- 使用.NET Core中创建Windows服务(一) - 使用官方推荐方式
原文:Creating Windows Services In .NET Core – Part 1 – The "Microsoft" Way 作者:Dotnet Core Tu ...
- [译]如何在.NET Core中使用System.Drawing?
你大概知道System.Drawing,它是一个执行图形相关任务的流行的API,同时它也不属于.NET Core的一部分.最初是把.NET Core作为云端框架设计的,它不包含非云端相关API.另一方 ...
- 在.NET Core中使用Jwt对API进行认证
在.NET Core中想用给API进行安全认证,最简单的无非就是Jwt,悠然记得一年前写的Jwt Demo,现在拿回来改成.NET Core的,但是在编码上的改变并不大,因为Jwt已经足够强大了.在项 ...
- [译]如何在ASP.NET Core中实现面向切面编程(AOP)
原文地址:ASPECT ORIENTED PROGRAMMING USING PROXIES IN ASP.NET CORE 原文作者:ZANID HAYTAM 译文地址:如何在ASP.NET Cor ...
- .NET Core 中的日志与分布式链路追踪
目录 .NET Core 中的日志与分布式链路追踪 .NET Core 中的日志 控制台输出 非侵入式日志 Microsoft.Extensions.Logging ILoggerFactory IL ...
- 使用 ASP.NET Core MVC 创建 Web API(一)
从今天开始来学习如何在 ASP.NET Core 中构建 Web API 以及每项功能的最佳适用场景.关于此次示例的数据库创建请参考<学习ASP.NET Core Razor 编程系列一> ...
随机推荐
- 【转】在Mac OS X 10.8中配置Apache + PHP + MySQL
CHENYILONG Blog 在Mac OS X 10.8中配置Apache + PHP + MySQL 在Mac OS X 10.8中配置Apache+PHP+MySQL的内容包括: 配置Apac ...
- MyCat分库分表入门
1.分区 对业务透明,分区只不过把存放数据的文件分成了许多小块,例如mysql中的一张表对应三个文件.MYD,MYI,frm. 根据一定的规则把数据文件(MYD)和索引文件(MYI)进行了分割,分区后 ...
- python所有基础
下面就不一一列举了,所有的资料都和GitHub对接,到时候我有更新就直接拖到GitHub上面了.入门的小伙伴们可以进来看看,估计后面还会有很多项目,待更新.
- Spring bean 配置
1.传统的创建对象的方式:JedisMall tardition=new JedisMall(); 这样是在程序运行时创建,表示当前模块已经不知不觉和new出的对象耦合了,而我们通常都是更高层次的抽象 ...
- c# XML读取
System.Xml 命名空间 https://msdn.microsoft.com/zh-cn/library/gg145036(v=vs.110).aspx 一.读取 1.通过 XmlDocume ...
- Mybatis 接口传入多个参数 xml怎么接收
mybatis 在接口上传入多个参数 1.如果传入的参数类型一样. Map<String, String> queryDkpayBindBankCidByOriBindAndBankCid ...
- 基于bootstrap的上传插件fileinput实现ajax异步上传功能(支持多文件上传预览拖拽)
首先需要导入一些js和css文件 ? 1 2 3 4 5 6 <link href="__PUBLIC__/CSS/bootstrap.css" rel="exte ...
- ADO.Net1
一.ADO.Net 数据库连接技术 二.查询 1.步骤: 1)使用数据库空间:using System.Data.SqlClient; 2)连接数据库 3)创建数据库操作命令 4)输入操作命令 5)开 ...
- WebApi 文档Swagger
NET WebApi 文档Swagger中度优化 本文版权归博客园和作者吴双本人共同所有,转载和爬虫请注明原文地址:www.cnblogs.com/tdws 写在前面 在后台接口开发中,接口文 ...
- 出现The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path错误
实际上就是tomcat没有配置的原因 先去http://tomcat.apache.org 下载tomcat 然后根据http://jingyan.baidu.com/article/8065f87f ...