Windows Compatibility Pack (WCP)

Eintrag zuletzt aktualisiert am: 19.04.2024

Das Windows Compatibility Pack for .NET Core umfasst zahlreiche Klassen aus dem klassischen .NET Framework (.NET "Full" 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-Programmcodes auf das neue .NET Core verhindert beziehungsweise erschwert. Trotz seines Namens laufen Teile dieser Bibliothek nicht nur Windows, sondern auch auf Linux und MacOS.

Microsoft hat das WCP auf der .NET Conf im September angekündigt [www.heise.de/developer/meldung/Microsoft-kuendigt-Windows-Compatibility-Pack-fuer-NET-Core-an-3835840.html] im November 2017 ist eine erste Vorschauversion (2.0.0-preview1-25914-04) erschienen., im März 2017 eine zweite Vorschauversion (2.0.0-preview1-26216-03). Dabei handelt es sich um ein Nuget-Metapaket mit Namen "Microsoft.Windows.Compatibility" [www.nuget.org/packages/Microsoft.Windows.Compatibility]. Das neue Paket lässt sich in .NET Core 2.0- und .NET Standard 2.0-Projekten referenzieren.

Das Metapaket umfasst zahlreiche Einzelpakete umfasst. Ein Entwickler kann 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.

Zu den Funktionen des WCP gehört der Zugriff auf die Windows-Registry, das Code Document Object Model (CodeDOM), das Komprimieren von Dateien, die 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.

Laut einem Blogeintrag von Microsoft umfasst das Windows Compatibility Pack 20.000 Funktionen [blogs.msdn.microsoft.com/dotnet/2017/11/16/announcing-the-windows-compatibility-pack-for-net-core]. Dies bezieht sich aber wohl auf die Endausbaustufe und nicht auf die aktuelle Preview-Version.

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 macht dort auch keinen Sinn.

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

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 zu Linux und Mac sein. Der Entwickler kann auf diesen Betriebssystemen zunächst einen Teil der Funktionen ausblenden und dann schrittweise für diese Betriebssysteme andere Implementierungen für diese Funktionen realisieren.