Verwenden des Windows Compatibility Pack zum Portieren auf .NET CoreUse the Windows Compatibility Pack to port code to .NET Core

Einige der beim Portieren von vorhandenem Code in .NET Core am häufigsten auftretenden Probleme sind Abhängigkeiten von APIs und Technologien, die nur in .NET Framework vorhanden sind.Some of the most common issues found when porting existing code to .NET Core are dependencies on APIs and technologies that are only found in .NET Framework. Das Windows Compatibility Pack bietet viele dieser Technologien, daher ist es viel einfacher, .NET Core-Anwendungen und .NET Standard-Bibliotheken zu erstellen.The Windows Compatibility Pack provides many of these technologies, so it's much easier to build .NET Core applications and .NET Standard libraries.

Das Compatibility Pack ist eine logische Erweiterung von .NET Standard 2.0, die den API-Satz erheblich erhöht.The compatibility pack is a logical extension of .NET Standard 2.0 that significantly increases the API set. Vorhandener Code wird mit fast allen Änderungen kompiliert.Existing code compiles with almost no modifications. 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.To keep its promise of "the set of APIs that all .NET implementations provide", .NET Standard doesn't include technologies that can't work across all platforms, such as registry, Windows Management Instrumentation (WMI), or reflection emit APIs. Windows Compatibility Pack basiert auf .NET Standard und stellt diese Technologien bereit, die nur unter Windows verfügbar sind.The Windows Compatibility Pack sits on top of .NET Standard and provides access to these Windows-only technologies. Für Kunden, die zu .NET Core wechseln, aber Windows beibehalten möchten, ist dies zumindest ein nützlicher erster Schritt.It's especially useful for customers that want to move to .NET Core but plan to stay on Windows, at least as a first step. In diesem Szenario wird die Migrationshürde durch die Möglichkeit beseitigt, ausschließlich Windows-Technologien zu verwenden.In that scenario, being able to use Windows-only technologies removes the migration hurdle.

PaketinhaltPackage contents

Windows Compatibility Pack wird über das NuGet-Paket Microsoft.Windows.Compatibility bereitgestellt. Projekte, die .NET Core oder .NET Standard als Ziel verwenden, können darauf verweisen.The Windows Compatibility Pack is provided via the Microsoft.Windows.Compatibility NuGet package and can be referenced from projects that target .NET Core or .NET Standard.

Es werden über 20.000 APIs aus folgenden Technologiebereichen bereitgestellt, darunter befinden sich sowohl Windows-APIs als auch plattformübergreifende APIs:It provides about 20,000 APIs, including Windows-only as well as cross-platform APIs from the following technology areas:

  • CodepagesCode Pages
  • CodeDomCodeDom
  • KonfigurationConfiguration
  • VerzeichnisdiensteDirectory Services
  • ZeichnungDrawing
  • ODBCODBC
  • BerechtigungenPermissions
  • PortsPorts
  • Windows-Zugriffssteuerungslisten (Access Control List, ACL)Windows Access Control Lists (ACL)
  • Windows Communication Foundation (WCF)Windows Communication Foundation (WCF)
  • Windows-KryptografieWindows Cryptography
  • Windows-EventLogWindows EventLog
  • Windows Management Instrumentation (WMI)Windows Management Instrumentation (WMI)
  • Windows-LeistungsindikatorenWindows Performance Counters
  • Windows-RegistrierungWindows Registry
  • Zwischenspeichern von Windows-RuntimeWindows Runtime Caching
  • Windows-DiensteWindows Services

Weitere Informationen finden Sie in den Angaben zum Windows Compatibility Pack.For more information, see the specification of the compatibility pack.

Erste SchritteGet started

  1. Machen Sie sich vor dem Portieren mit dem Portiervorgang vertraut.Before porting, make sure to take a look at the Porting process.

  2. Wenn Sie vorhandenen Code in .NET Core oder .NET Standard portieren, installieren Sie das NuGet-Paket Microsoft.Windows.Compatibility.When porting existing code to .NET Core or .NET Standard, install the Microsoft.Windows.Compatibility NuGet package.

    Wenn Sie Windows beibehalten möchten, können Sie sofort beginnen.If you want to stay on Windows, you're all set.

  3. Wenn Sie die .NET Core-Anwendung oder die .NET Standard-Bibliothek unter Linux oder macOS ausführen möchten, verwenden Sie API Analyzer, um die Verwendungen der APIs zu ermitteln, die nicht plattformübergreifend funktionieren.If you want to run the .NET Core application or .NET Standard library on Linux or macOS, use the API Analyzer to find usage of APIs that won't work cross-platform.

  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:Either remove the usages of those APIs, replace them with cross-platform alternatives, or guard them using a platform check, like:

    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).For a demo, check out the Channel 9 video of the Windows Compatibility Pack.