Uso del paquete de compatibilidad de Windows para migrar código a .NET

Algunos de los problemas más comunes que se encuentran al trasladar código existente de .NET Framework a .NET son las dependencias de API y tecnologías que solo se encuentran en .NET Framework. El paquete de compatibilidad de Windows proporciona muchas de estas tecnologías, por lo que es mucho más fácil crear aplicaciones de .NET y bibliotecas de .NET Standard.

El paquete de compatibilidad es una extensión lógica de .NET Standard 2.0 que aumenta considerablemente el conjunto de API. El código existente se compila prácticamente sin modificaciones. Para mantener su promesa de "el conjunto de API que proporcionan todas las implementaciones de .NET", .NET Standard no incluye tecnologías que no puedan funcionar en todas las plataformas, como el Registro, Instrumental de administración de Windows (WMI) o las API de emisión de la reflexión. El paquete de compatibilidad de Windows está un nivel por encima de .NET Standard y proporciona acceso a estas tecnologías que solo son de Windows. Es especialmente útil para los clientes que quieren cambiar a .NET pero piensan permanecer en Windows, al menos como primer paso. En ese escenario, se pueden usar tecnologías solo de Windows para eliminar el obstáculo de la migración.

Contenido del paquete

El paquete de compatibilidad de Windows se proporciona mediante el paquete NuGet Microsoft.Windows.Compatibility y se puede hacer referencia a él desde proyectos para .NET o .NET Standard.

Proporciona unas 20 000 API, incluidas API solo de Windows y de varias plataformas de las siguientes áreas tecnológicas:

  • Páginas de códigos
  • CodeDom
  • Configuración
  • Servicios de directorio
  • Dibujo
  • ODBC
  • Permisos
  • Puertos
  • Listas de control de acceso (ACL) de Windows
  • Windows Communication Foundation (WCF)
  • Criptografía de Windows
  • Registro de eventos de Windows
  • Instrumental de administración de Windows (WMI)
  • Contadores de rendimiento de Windows
  • Registro de Windows
  • Memoria caché de tiempo de ejecución de Windows
  • servicios de Windows

Para más información, vea las especificaciones del paquete de compatibilidad.

Introducción

  1. Antes de migrar, asegúrese de echar un vistazo al proceso de migración.

  2. Al trasladar código existente a .NET o .NET Standard, instale el paquete NuGet Microsoft.Windows.Compatibility.

    Si quiere permanecer en Windows, ya está listo.

  3. Si quiere ejecutar la aplicación de .NET o la biblioteca de .NET Standard en Linux o macOS, use el Analizador de compatibilidad de plataforma para informarse de las API que no funcionan entre plataformas.

  4. Quite esas API, reemplácelas con alternativas multiplataforma o restrínjalas con una comprobación de plataforma, como:

    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");
    }
    

Para ver una demostración, vaya al vídeo de Channel 9 sobre el paquete de compatibilidad de Windows.