Uso del paquete de compatibilidad de Windows para trasladar código a .NET 5+Use the Windows Compatibility Pack to port code to .NET 5+

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.Some of the most common issues found when porting existing code from .NET Framework to .NET are dependencies on APIs and technologies that are only found in .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.The Windows Compatibility Pack provides many of these technologies, so it's much easier to build .NET applications and .NET Standard libraries.

El paquete de compatibilidad es una extensión lógica de .NET Standard 2.0 que aumenta considerablemente el conjunto de API.The compatibility pack is a logical extension of .NET Standard 2.0 that significantly increases the API set. El código existente se compila prácticamente sin modificaciones.Existing code compiles with almost no modifications. 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.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. 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.The Windows Compatibility Pack sits on top of .NET Standard and provides access to these Windows-only technologies. Es especialmente útil para los clientes que quieren cambiar a .NET pero piensan permanecer en Windows, al menos como primer paso.It's especially useful for customers that want to move to .NET but plan to stay on Windows, at least as a first step. En ese escenario, se pueden usar tecnologías solo de Windows para eliminar el obstáculo de la migración.In that scenario, you can use Windows-only technologies removes the migration hurdle.

Contenido del paquetePackage contents

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.The Windows Compatibility Pack is provided via the Microsoft.Windows.Compatibility NuGet package and can be referenced from projects that target .NET or .NET Standard.

Proporciona unas 20 000 API, incluidas API solo de Windows y de varias plataformas de las siguientes áreas tecnológicas:It provides about 20,000 APIs, including Windows-only and cross-platform APIs from the following technology areas:

  • Páginas de códigosCode Pages
  • CodeDomCodeDom
  • ConfiguraciónConfiguration
  • Servicios de directorioDirectory Services
  • DibujoDrawing
  • ODBCODBC
  • PermisosPermissions
  • PuertosPorts
  • Listas de control de acceso (ACL) de WindowsWindows Access Control Lists (ACL)
  • Windows Communication Foundation (WCF)Windows Communication Foundation (WCF)
  • Criptografía de WindowsWindows Cryptography
  • Registro de eventos de WindowsWindows EventLog
  • Instrumental de administración de Windows (WMI)Windows Management Instrumentation (WMI)
  • Contadores de rendimiento de WindowsWindows Performance Counters
  • Registro de WindowsWindows Registry
  • Memoria caché de tiempo de ejecución de WindowsWindows Runtime Caching
  • servicios de WindowsWindows Services

Para más información, vea las especificaciones del paquete de compatibilidad.For more information, see the specification of the compatibility pack.

IntroducciónGet started

  1. Antes de migrar, asegúrese de echar un vistazo al proceso de migración.Before porting, make sure to take a look at the Porting process.

  2. Al trasladar código existente a .NET o .NET Standard, instale el paquete NuGet Microsoft.Windows.Compatibility.When porting existing code to .NET or .NET Standard, install the Microsoft.Windows.Compatibility NuGet package.

    Si quiere permanecer en Windows, ya está listo.If you want to stay on Windows, you're all set.

  3. Si quiere ejecutar la aplicación de .NET o la biblioteca de .NET Standard en Linux o macOS, use el analizador de API para informarse de las API que no funcionan entre plataformas.If you want to run the .NET 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. Quite esas API, reemplácelas con alternativas multiplataforma o restrínjalas con una comprobación de plataforma, como: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");
    }
    

Para ver una demostración, vaya al vídeo de Channel 9 sobre el paquete de compatibilidad de Windows.For a demo, check out the Channel 9 video of the Windows Compatibility Pack.

Vea tambiénSee also