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 la conversione del codice esistente a .NET Core sono le dipendenze da API e tecnologie presenti 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 the .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.

Questo pacchetto è un'estensione logica di .NET 2.0 Standard che incrementa in modo significativo il set di API e consente la compilazione di codice esistente praticamente senza modifiche.This package is a logical extension of .NET Standard 2.0 that significantly increases API set and existing code compiles with almost no modifications. Tuttavia, per rispettare i principi di .NET Standard ("è il set di API fornite da tutte le implementazioni .NET"), questo pacchetto non include tecnologie che non funzionano in tutte le piattaforme, ad esempio le API per Registro di sistema, Strumentazione gestione Windows (WMI) o reflection emit.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 si sovrappone a .NET Standard e consente l'accesso a tecnologie solo Windows.The Windows Compatibility Pack sits on top of .NET Standard and provides access to technologies that are Windows only. È particolarmente utile per i clienti che vogliono passare a .NET Core ma prevedono di rimanere sulla piattaforma Windows come primo passo.It's especially useful for customers that want to move to .NET Core but plan to stay on Windows as a first step. In questo scenario, l'impossibilità di usare tecnologie solo Windows è solo un ostacolo per la migrazione senza alcun vantaggio a livello di architettura.In that scenario, not being able to use Windows-only technologies is only a migration hurdle with zero architectural benefits.

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 NuGet Package Microsoft.Windows.Compatibility and can be referenced from projects targeting .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
  • Strumentazione gestione Windows (WMI, Windows Management Instrumentation)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.

IntroduzioneGet started

  1. Prima di procedere alla conversione, assicurarsi di esaminare il processo di conversione.Before porting, make sure to take a look at the Porting Process.

  2. Per la conversione di codice esistente per .NET Core o .NET Standard, installare il pacchetto NuGet Microsoft.Windows.Compatibility.When porting existing code to .NET Core or .NET Standard, install the NuGet package Microsoft.Windows.Compatibility.

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

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

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