1. 程式人生 > >使用Windows相容包簡化向.NET Core的遷移

使用Windows相容包簡化向.NET Core的遷移

從.NET遷移到.NET Core的一個主要原因,在於後者具備在Linux上執行的能力。但是對於大型企業應用,不可能實現一步遷移到位。由此,Microsoft推薦採用一種逐步遷移做法:
  • 第一步,遷移到ASP.NET Core(依然使用.NET Framework);
  • 第二步,遷移到.NET Core(依然執行在Windows上);
  • 第三步,遷移到Linux上;
  • 第四步,遷移到(託管Linux主機的)Azure中。
這一做法理論上可行,但是在第二步中會有阻礙,因為缺乏關鍵API。用於.NET Core的Windows相容包的推出,意在解決這一問題。該相容包是一個NuGet軟體包集合,其中包含了近兩萬個API,目的在於解決Web應用程式開發人員對於優秀軟體庫的需求。
新引入的API大體上可分為兩類。一類是僅適用於Windows的API,另一類是跨平臺的軟體庫。其中,僅適用於Windows的API包括:
  • Active directory;
  • 加密;
  • 事件日誌和效能計數器;
  • 檔案系統安全;
  • 命名管道;
  • 登錄檔訪問(Registry Access);
  • Windows服務。
其中大部分API是與Windows作業系統緊密關聯的,而相應的Linux API通常在設計上迥異。 跨平臺的軟體庫包括:
  • 快取;
  • 配置管理(ConfigurationManager),即處理遺留的app.config和web.config檔案;
  • 資料集擴充套件(DatasetExtensions),用於不使用ORM訪問資料庫;
  • ODBC資料庫訪問;
  • System.Configuration.ConfigurationManager(MEF v1);
  • System.Drawing;
  • System.IO.Packaging,用於與MS Office型別的壓縮檔案互動;
  • System.ServiceModel,即WCF(Windows Communication Foundation)。
需指出的是,這些API是刻意獨立於.NET Core的完整發布的。對此,Microsoft的Immo Landwerth給出瞭如下解釋:
以獨立軟體包提供的原因在於:(一)不少API是僅出於相容性的考慮而提供的。在新程式碼中,不應依賴於這些API;(二)不少API僅用於Windows平臺。我們不希望將使用者引上一條更難以跨平臺遷移應用的道路。
為了易於區分僅適用於Windows的和跨平臺的API,現在有一種API相容性分析工具可用。該工具可以標記出那些在應用中不應繼續依賴的API。
你可以使用與棄用API相同的抑制選項,但是也可以選擇對特定平臺給出抑制警告。如果你僅規劃在一組特定的平臺上支援你的程式碼,例如只支援Windows和Linux但不支援macOS,這一工具十分有用。為此,你只需編輯專案檔案,新增一個PlatformCompatIgnore屬性,並在該屬性中列出所有要忽略的平臺。