Partager via


Utiliser le pack de compatibilité Windows pour porter le code vers .NET

Certains des problèmes les plus courants détectés lors du portage du code existant de .NET Framework vers .NET sont des dépendances sur les API et technologies qui sont uniquement trouvées dans .NET Framework. Le pack de compatibilité Windows fournit une grande partie de ces technologies. Il est donc beaucoup plus facile de créer des applications .NET et des bibliothèques .NET Standard.

Le pack de compatibilité est une extension logique de .NET Standard 2.0 qui augmente considérablement l’ensemble d’API. Le code existant est compilé avec presque aucune modification. Pour tenir sa promesse d'« ensemble d’API que toutes les implémentations .NET fournissent », .NET Standard n’inclut pas les technologies qui ne peuvent pas fonctionner sur toutes les plateformes, telles que le Registre, Windows Management Instrumentation (WMI) ou les API d’émission de réflexion. Le pack de compatibilité Windows se trouve sur .NET Standard et fournit un accès à ces technologies Windows uniquement. Il est particulièrement utile pour les clients qui souhaitent passer à .NET, mais prévoyez de rester sur Windows, au moins en tant que première étape. Dans ce scénario, vous pouvez utiliser les technologies Windows uniquement pour supprimer l’obstacle à la migration.

Contenu d'un package

Le pack de compatibilité Windows est fourni via le package NuGet Microsoft.Windows.Compatibility et peut être référencé à partir de projets qui ciblent .NET ou .NET Standard.

Il fournit environ 20 000 API, y compris les API Windows uniquement et multiplateformes des domaines technologiques suivants :

  • Pages de codes
  • CodeDom
  • Paramétrage
  • Services d'annuaire
  • Dessin
  • ODBC
  • Autorisations
  • Ports maritimes
  • Listes de contrôle d’accès Windows (ACL)
  • Windows Communication Foundation (WCF)
  • Chiffrement Windows
  • Journal des événements Windows
  • Windows Management Instrumentation (WMI)
  • Compteurs de performances Windows
  • Registre Windows
  • Mise en cache Windows Runtime
  • services Windows

Pour plus d’informations, consultez la spécification du pack de compatibilité.

Commencez

  1. Avant le portage, veillez à examiner le processus de portage.

  2. Lors du portage du code existant vers .NET ou .NET Standard, installez le package NuGet Microsoft.Windows.Compatibility.

    Si vous souhaitez rester sur Windows, vous êtes tous définis.

  3. Si vous souhaitez exécuter l’application .NET ou la bibliothèque .NET Standard sur Linux ou macOS, utilisez l’analyseur de compatibilité de la plateforme pour rechercher l’utilisation des API qui ne fonctionnent pas sur plusieurs plateformes.

  4. Supprimez les utilisations de ces API, remplacez-les par des alternatives multiplateformes ou protégez-les à l’aide d’une vérification de plateforme, par exemple :

    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 une démonstration, consultez la vidéo Channel 9 du pack de compatibilité Windows.