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

Einige der beim Portieren vorhandenen Codes zu .NET Core am häufigsten auftretenden Probleme sind Abhängigkeiten von APIs und Technologien, die nur in .NET Framework vorliegen.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 the .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.

Bei diesem Paket handelt es sich um eine logische Erweiterung von .NET Standard 2.0, durch die der API-Satz erheblich erhöht wird und vorhandener Code nahezu ohne Änderungen kompiliert wird.This package is a logical extension of .NET Standard 2.0 that significantly increases API set and existing code compiles with almost no modifications. Damit das Versprechen von .NET Standard („der API-Satz, den alle .NET-Implementierungen bereitstellen“) eingehalten werden kann, gilt dies nicht für Technologien, die nicht auf allen Plattformen funktionieren können, z.B. die Registrierung, Windows-Verwaltungsinstrumentation (WMI) oder APIs für die Reflektionsausgabe.But in order to keep the promise of .NET Standard ("it is the set of APIs that all .NET implementations provide"), this didn'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 Technologien bereit, die nur unter Windows verfügbar sind.The Windows Compatibility Pack sits on top of .NET Standard and provides access to technologies that are Windows only. Für Kunden, die zu .NET Core wechseln, aber Windows beibehalten möchten, ist dies ein nützlicher erster Schritt.It's especially useful for customers that want to move to .NET Core but plan to stay on Windows as a first step. In diesem Szenario stellt es bei der Migration eine Hürde ohne architektonische Vorteile dar, wenn Windows-Technologien nicht verwendet werden können.In that scenario, not being able to use Windows-only technologies is only a migration hurdle with zero architectural benefits.

PaketinhaltPackage contents

Windows Compatibility Pack wird über das NuGet-Paket Microsoft.Windows.Compatibility bereitgestellt werden, und Projekte, die .NET Core oder .NET Standard anzielen, können darauf verweisen.The Windows Compatibility Pack is provided via the NuGet Package Microsoft.Windows.Compatibility and can be referenced from projects targeting .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 zu .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 NuGet package Microsoft.Windows.Compatibility.

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

  4. 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.

  5. 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.