Verwenden des Windows Compatibility Pack zum Portieren von Code zu .NET

Einige der häufigsten Probleme, die beim Portieren von vorhandenem Code aus .NET Framework zu .NET auftreten, sind Abhängigkeiten von APIs und Technologien, die nur in .NET Framework zu finden sind. Das Windows Compatibility Pack bietet viele dieser Technologien, daher ist es viel einfacher, .NET-Anwendungen und .NET Standard-Bibliotheken zu erstellen.

Das Compatibility Pack ist eine logische Erweiterung von .NET Standard 2.0, die den API-Satz erheblich erhöht. Vorhandener Code wird mit fast allen Änderungen kompiliert. Damit das Versprechen („der API-Satz, den alle .NET-Implementierungen bereitstellen“) eingehalten werden kann, enthält .NET-Standard keine Technologien, die nicht auf allen Plattformen funktionieren können, wie z. B. die Registrierung, die Windows-Verwaltungsinstrumentation (WMI) oder APIs für die Reflektionsausgabe. Windows Compatibility Pack basiert auf .NET Standard und stellt diese Technologien bereit, die nur unter Windows verfügbar sind. Für Kunden, die zu .NET wechseln, aber Windows beibehalten möchten, ist dies zumindest ein nützlicher erster Schritt. In diesem Szenario wird die Migrationshürde durch die Möglichkeit beseitigt, ausschließlich Windows-Technologien zu verwenden.

Paketinhalt

Windows Compatibility Pack wird über das NuGet-Paket Microsoft.Windows.Compatibility bereitgestellt. Projekte, die .NET oder .NET Standard als Ziel verwenden, können darauf verweisen.

Es werden über 20.000 APIs aus folgenden Technologiebereichen bereitgestellt, darunter befinden sich sowohl Windows-APIs als auch plattformübergreifende APIs:

  • Codepages
  • CodeDom
  • Konfiguration
  • Verzeichnisdienste
  • Zeichnung
  • ODBC
  • Berechtigungen
  • Ports
  • Windows-Zugriffssteuerungslisten (Access Control List, ACL)
  • Windows Communication Foundation (WCF)
  • Windows-Kryptografie
  • Windows-EventLog
  • Windows-Verwaltungsinstrumentation (WMI, Windows Management Instrumentation)
  • Windows-Leistungsindikatoren
  • Windows-Registrierung
  • Zwischenspeichern von Windows-Runtime
  • Windows-Dienste

Weitere Informationen finden Sie in den Angaben zum Windows Compatibility Pack.

Erste Schritte

  1. Machen Sie sich vor dem Portieren mit dem Portiervorgang vertraut.

  2. Wenn Sie vorhandenen Code zu .NET oder .NET Standard portieren, installieren Sie das NuGet-Paket Microsoft.Windows.Compatibility.

    Wenn Sie Windows beibehalten möchten, können Sie sofort beginnen.

  3. Wenn Sie die .NET-Anwendung oder die .NET Standard-Bibliothek unter Linux oder macOS ausführen möchten, verwenden Sie den Plattform-Kompatibilitäts-Analyzer, um die Verwendungen der APIs zu ermitteln, die nicht plattformübergreifend funktionieren.

  4. Entfernen Sie die Verwendungen dieser APIs, ersetzen Sie diese durch plattformübergreifende Alternativen, oder schützen Sie diese folgendermaßen mithilfe einer Plattformüberprüfung:

    private static string GetLoggingPath()
    {
        // Verify the code is running on Windows.
        if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
        {
            using (var key = Registry.CurrentUser.OpenSubKey(@"Software\Fabrikam\AssetManagement"))
            {
                if (key?.GetValue("LoggingDirectoryPath") is string configuredPath)
                    return configuredPath;
            }
        }
    
        // This is either not running on Windows or no logging path was configured,
        // so just use the path for non-roaming user-specific data files.
        var appDataPath = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
        return Path.Combine(appDataPath, "Fabrikam", "AssetManagement", "Logging");
    }
    

Eine Demo finden Sie in diesem Channel 9 video of the Windows Compatibility Pack (Video von Channel 9 über Windows Compatibility Pack).