Windows Compatibility Pack for .NET Core (WCP)

Eintrag zuletzt aktualisiert am: 12.03.2018

Microsoft hat im Noveber 2017 wie auf der .NET Conf im September 2017 angekündigt eine erste Vorschauversion des "Windows Compatibility Pack for .NET Core" veröffentlicht. Dabei handelt es sich um ein Nuget-Metapaket mit dem Namen "Microsoft.Windows.Compatibility", das zahlreiche Einzelpakete umfasst. Entwickler können wahlweise die benötigten Einzelpakete oder das Metapaket referenzieren, wobei im letzteren Fall die Deployment-Werkzeuge von .NET Core und Visual Studio dafür sorgen, dass nur die tatsächlich verwendeten Einzelpakete verbreitet werden. Das neue Paket lässt sich in .NET Core 2.0- und .NET Standard 2.0-Projekten referenzieren.

Ein Wiedersehen mit alten Klassen

Das Windows Compatibility Pack for .NET Core umfasst zahlreiche Klassen aus dem klassischen .NET Framework, die es dort zum Teil schon seit Version 1.0 gibt, die aber bisher nicht im .NET Standard 2.0 und damit auch nicht in .NET Core enthalten sind. Das hat bisher die Migration klassischen .NET-Framework-Codes auf das neue .NET Core verhindert beziehungsweise erschwert. Trotz seines Namens laufen Teile dieser Bibliothek nicht nur Windows, sondern auch auf Linux und MacOS.

Zu den nun neu angebotenen Funktionen gehört der Zugriff auf die Windows-Registry, das Code Document Object Model (CodeDOM), das Komprimieren von Dateien, das Lesen und Verändern von Dateiberechtigungen, die Bereitstellung von Webservices mit der Windows Communication Foundation (WCF) und die direkte Datenbankprogrammierung mit den Klassen DataSet und DataReader gegen einen Microsoft SQL Server.

Microsoft plant weitere Klassen in das Bibliothekpaket aufzunehmen, darunter ODBC-Datenbankzugriffe, Grafikbearbeitung und Caching sowie die Windows Management Instrumentation (WMI) für den Zugriff auf Systeminformationen. Laut einem Blogeintrag von Microsoft umfasst das Windows Compatibility Pack 20.000 Funktionen. Die Zahl bezieht sich aber wohl auf die Endausbaustufe und nicht auf die aktuelle Preview-Version.

Teilweise auch für Linux und MacOS

Anders als der Name "Windows Compatibility Pack" suggeriert, sind einige der Teilbibliotheken nicht nur auf Windows, sondern auch auf den anderen von .NET Core unterstützten Plattformen Linux und MacOS verfügbar. Einige Funktionen wie der Windows Registry-Zugriff wären dort jedoch kaum sinnvoll.

Wenn Entwickler Teile des Windows Compatibility Pack verwenden, die nur für Windows implementiert sind, verlieren sie die Plattformunabhängigkeit. Die Anwendung lässt sich dann zwar noch auf MacOS oder Linux starten, es kommt aber beim Zugriff auf die betreffenden APIs zum Laufzeitfehlertyp PlatformNotSupportedException. Entwickler können mit der Bedingung if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) { … } die Zugriffe auf diese APIs nur dann durchführen, wenn die Anwendung unter Windows läuft.

Erleichterte Migration

Das neue Windows Compatibility Pack vereinfacht insbesondere den Umstieg vom klassischen .NET Framework auf .NET Core für Entwickler, die zumindest vorerst weiterhin ihre Anwendung nur für Windows anbieten wollen. Der Einsatz des Windows Compatibility Pack kann auch ein erster Schritt in Hinblick auf den Betrieb auf Linux und Mac sein. Entwickler können auf diesen Betriebssystemen zunächst einen Teil der Funktionen ausblenden und dann schrittweise andere Implementierungen dafür umsetzen.