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

Certains des problèmes courants que l’on peut rencontrer en portant du code de .NET Framework vers .NET Core sont des dépendances à des API et à des technologies propres à .NET Framework. Le pack de compatibilité Windows comporte la plupart de ces technologies, ce qui facilite la création d’applications .NET et de 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é presque sans modifications. 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 repose sur .NET Standard et permet d’accéder à ces technologies Windows uniquement. Il est particulièrement utile pour les clients qui veulent passer à .NET, mais envisagent de rester sur Windows, au moins pour commencer. 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 ciblant .NET ou .NET Standard.

Il fournit environ 20 000 API, dont des API Windows uniquement ainsi des API multiplateformes des domaines technologiques suivants :

  • Pages de codes
  • CodeDom
  • Configuration
  • Services d'annuaire
  • Dessin
  • ODBC
  • Autorisations
  • Ports
  • Listes de contrôle d’accès Windows
  • 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é.

Bien démarrer

  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 prêt.

  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 trouver l’usage des API qui ne fonctionnent pas sur toutes les plateformes.

  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 :

    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.