Freigeben über


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

Einige der am häufigsten auftretenden Probleme beim Portieren von vorhandenem Code von .NET Framework zu .NET sind Abhängigkeiten von APIs und Technologien, die nur in .NET Framework gefunden werden. Das Windows Compatibility Pack bietet viele dieser Technologien, sodass es wesentlich einfacher ist, .NET-Anwendungen und .NET Standardbibliotheken zu erstellen.

Das Compatibility Pack ist eine logische Erweiterung von .NET Standard 2.0 , die den API-Satz erheblich erhöht. Bestehender Code wird ohne Änderungen kompiliert. Um das Versprechen "den Satz von APIs, die alle .NET-Implementierungen bereitstellen" einzuhalten, enthält .NET Standard keine Technologien, die nicht auf allen Plattformen funktionieren können, wie beispielsweise Registry, Windows-Verwaltungsinstrumentation (WMI) oder Reflection Emit-APIs. Das Windows Compatibility Pack baut auf dem .NET Standard auf und bietet Zugriff auf diese Windows-exklusiven Technologien. Es ist besonders nützlich für Kunden, die zu .NET wechseln möchten, aber planen, auf Windows zu bleiben, zumindest als erster Schritt. In diesem Szenario können Sie Nur-Windows-Technologien verwenden, um die Migrationshürde zu beseitigen.

Paketinhalt

Das Windows Compatibility Pack wird über das Microsoft.Windows.Compatibility NuGet-Paket bereitgestellt und kann aus Projekten referenziert werden, die auf .NET oder .NET Standard abzielen.

Es bietet ca. 20.000 APIs, einschließlich Windows-only und plattformübergreifende APIs aus den folgenden Technologiebereichen:

  • Codeseiten
  • CodeDom
  • Konfiguration
  • Verzeichnisdienste
  • Zeichnung
  • ODBC
  • Erlaubnisse
  • Häfen
  • Windows-Zugriffskontrolllisten (ACL)
  • Windows Communication Foundation (WCF)
  • Windows-Kryptografie
  • Windows Ereignisprotokoll
  • Windows-Verwaltungsinstrumentation (WMI)
  • Windows-Leistungsindikatoren
  • Windows-Registrierung
  • Zwischenspeichern von Windows-Runtime
  • Windows-Dienste

Weitere Informationen finden Sie in der Spezifikation des Kompatibilitätspakets.

Loslegen

  1. Stellen Sie vor dem Portieren sicher, dass Sie sich den Portierungsprozess ansehen.

  2. Installieren Sie beim Portieren von vorhandenem Code zu .NET oder .NET Standard das NuGet-Paket "Microsoft.Windows.Compatibility".

    Wenn Sie bei Windows bleiben möchten, sind Sie startklar.

  3. Wenn Sie die .NET-Anwendung oder .NET Standard-Bibliothek unter Linux oder macOS ausführen möchten, verwenden Sie die Plattformkompatibilitätsanalyse , um die Verwendung von APIs zu finden, die nicht plattformübergreifend funktionieren.

  4. Entfernen Sie entweder die Verwendung dieser APIs, ersetzen Sie sie durch plattformübergreifende Alternativen, oder schützen Sie sie mithilfe einer Plattformüberprüfung, z. B.:

    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 im Channel 9-Video des Windows Compatibility Pack.