Utiliser le pack de compatibilité Windows pour porter du code vers .NET CoreUse the Windows Compatibility Pack to port code to .NET Core

Certains des problèmes les plus courants rencontrés lors du Portage de code existant vers .NET Core sont des dépendances sur les API et les technologies qui se trouvent uniquement dans .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. Le pack de compatibilité Windows comporte la plupart de ces technologies, ce qui facilite la création d’applications .NET Core et de bibliothèques .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.

Le Pack de compatibilité est une extension logique de .NET Standard 2,0 qui augmente considérablement l’ensemble des API.The compatibility pack is a logical extension of .NET Standard 2.0 that significantly increases the API set. Le code existant est compilé avec presque aucune modification.Existing code compiles with almost no modifications. Pour conserver sa promesse de « l’ensemble des API fournies par toutes les implémentations .NET », .NET Standard n’inclut pas les technologies qui ne peuvent pas fonctionner sur toutes les plateformes, telles que le registre, les Windows Management Instrumentation (WMI) ou les API de l’émission de réflexion.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. Le Pack de compatibilité Windows se trouve au-dessus de .NET Standard et fournit un accès à ces technologies Windows uniquement.The Windows Compatibility Pack sits on top of .NET Standard and provides access to these Windows-only technologies. Elle est particulièrement utile pour les clients qui souhaitent passer à .NET Core, mais elles envisagent de rester sur Windows, au moins en tant que première étape.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. Dans ce scénario, la possibilité d’utiliser des technologies Windows uniquement supprime le obstacle à la migration.In that scenario, being able to use Windows-only technologies removes the migration hurdle.

Contenu du packagePackage contents

Le Pack de compatibilité Windows est fourni via le package NuGet Microsoft. Windows. Compatibility et peut être référencé à partir des projets qui ciblent .net Core ou .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.

Il fournit environ 20 000 API, dont des API Windows uniquement ainsi des API multiplateformes des domaines technologiques suivants :It provides about 20,000 APIs, including Windows-only as well as cross-platform APIs from the following technology areas:

  • Pages de codesCode Pages
  • CodeDomCodeDom
  • ConfigurationConfiguration
  • Services d'annuaireDirectory Services
  • DessinDrawing
  • ODBCODBC
  • AutorisationsPermissions
  • PortsPorts
  • Listes de contrôle d’accès WindowsWindows Access Control Lists (ACL)
  • Windows Communication Foundation (WCF)Windows Communication Foundation (WCF)
  • Chiffrement WindowsWindows Cryptography
  • Journal des événements WindowsWindows EventLog
  • Windows Management Instrumentation (WMI)Windows Management Instrumentation (WMI)
  • Compteurs de performances WindowsWindows Performance Counters
  • Registre WindowsWindows Registry
  • Mise en cache Windows RuntimeWindows Runtime Caching
  • Services WindowsWindows Services

Pour plus d’informations, consultez la spécification du pack de compatibilité.For more information, see the specification of the compatibility pack.

Prise en mainGet started

  1. Avant de procéder au Portage, veillez à examiner le processus de Portage.Before porting, make sure to take a look at the Porting process.

  2. Lors du Portage du code existant vers .NET Core ou .NET Standard, installez le package NuGet Microsoft. Windows. Compatibility.When porting existing code to .NET Core or .NET Standard, install the Microsoft.Windows.Compatibility NuGet package.

    Si vous souhaitez rester sur Windows, vous êtes prêt.If you want to stay on Windows, you're all set.

  3. Si vous souhaitez exécuter l’application .NET Core ou la bibliothèque .NET Standard sur Linux ou macOS, utilisez l’analyseur d’API pour trouver l’usage des API qui ne fonctionnent pas sur toutes les plateformes.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. Supprimez les usages de ces API, remplacez-les par des alternatives multiplateformes ou protégez-les à l’aide d’une vérification de la plateforme, par exemple :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");
    }
    

Pour obtenir une démonstration, regardez la vidéo de Channel 9 sur le pack de compatibilité Windows.For a demo, check out the Channel 9 video of the Windows Compatibility Pack.