Usare Windows Compatibility Pack per convertire il codice per .NET CoreUse the Windows Compatibility Pack to port code to .NET Core

Alcuni dei problemi più comuni riscontrati durante il porting di codice esistente a .NET Core sono dipendenze da API e tecnologie disponibili solo in .NET Framework.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. Windows Compatibility Pack fornisce molte di queste tecnologie ed è quindi molto più semplice compilare applicazioni .NET Core e librerie .NET Standard.The Windows Compatibility Pack provides many of these technologies, so it's much easier to build .NET Core applications and .NET Standard libraries.

Il pacchetto di compatibilità è un' estensione logica di .NET Standard 2,0 che aumenta significativamente il set di API.The compatibility pack is a logical extension of .NET Standard 2.0 that significantly increases the API set. Il codice esistente viene compilato con quasi nessuna modifica.Existing code compiles with almost no modifications. Per evitare che il set di API fornito da tutte le implementazioni di .NET, .NET Standard non includa tecnologie che non possono essere usate in tutte le piattaforme, ad esempio il registro di sistema, Strumentazione gestione Windows (WMI) o le API di Reflection Emit.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 è posizionato sopra .NET Standard e fornisce l'accesso a queste tecnologie solo Windows.The Windows Compatibility Pack sits on top of .NET Standard and provides access to these Windows-only technologies. È particolarmente utile per i clienti che vogliono passare a .NET Core, ma che prevedono di rimanere in Windows, almeno come primo passaggio.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 questo scenario, la possibilità di utilizzare le tecnologie solo Windows rimuove l'ostacolo alla migrazione.In that scenario, being able to use Windows-only technologies removes the migration hurdle.

Contenuto del pacchettoPackage contents

Windows Compatibility Pack viene fornito tramite il pacchetto NuGet Microsoft. Windows. Compatibility ed è possibile farvi riferimento dai progetti destinati a .NET Core o .NET standard.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.

Include circa 20.000 API, incluse API solo per Windows e API multipiattaforma per le aree tecnologiche seguenti:It provides about 20,000 APIs, including Windows-only as well as cross-platform APIs from the following technology areas:

  • Tabelle codiciCode Pages
  • CodeDomCodeDom
  • ConfigurazioneConfiguration
  • Servizi directoryDirectory Services
  • DisegnoDrawing
  • ODBCODBC
  • AutorizzazioniPermissions
  • PortePorts
  • Elenchi di controllo degli accessi (ACL) di WindowsWindows Access Control Lists (ACL)
  • Windows Communication Foundation (WCF)Windows Communication Foundation (WCF)
  • Crittografia di WindowsWindows Cryptography
  • Registro eventi di WindowsWindows EventLog
  • Windows Management Instrumentation (WMI)Windows Management Instrumentation (WMI)
  • Contatori delle prestazioni di WindowsWindows Performance Counters
  • Registro di sistema di WindowsWindows Registry
  • Memorizzazione nella cache di Windows RuntimeWindows Runtime Caching
  • Servizi WindowsWindows Services

Per altre informazioni, vedere la specifica del pacchetto di compatibilità.For more information, see the specification of the compatibility pack.

Attività inizialiGet started

  1. Prima di eseguire il porting, assicurarsi di esaminare il processo di porting.Before porting, make sure to take a look at the Porting process.

  2. Quando si porta il codice esistente in .NET Core o .NET Standard, installare il pacchetto NuGet Microsoft. Windows. Compatibility.When porting existing code to .NET Core or .NET Standard, install the Microsoft.Windows.Compatibility NuGet package.

    Se si desidera rimanere in ambiente Windows, questo è tutto.If you want to stay on Windows, you're all set.

  3. Se si vuole eseguire l'applicazione .NET Core o la libreria .NET Standard in Linux o macOS, usare l'analizzatore delle API per trovare informazioni sull'utilizzo delle API non supportato in tutte le piattaforme.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. Rimuovere questi utilizzi di tali API, sostituirli con alternative multipiattaforma o proteggerli con un controllo di piattaforma, ad esempio: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");
    }
    

Per una demo, vedere il video di Channel 9 dedicato a Windows Compatibility Pack.For a demo, check out the Channel 9 video of the Windows Compatibility Pack.