通過Windows Compatibility Pack補充.net core中缺失的api

來源:互聯網
上載者:User

標籤:註冊   ann   另一個   log   white   www   get   兩種   package   

把項目往.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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.