Partilhar via


Usar o Pacote de Compatibilidade do Windows para portar código para .NET

Alguns dos problemas mais comuns encontrados ao portar código existente do .NET Framework para o .NET são dependências em APIs e tecnologias que só são encontradas no .NET Framework. O Pacote de Compatibilidade do Windows fornece muitas dessas tecnologias, portanto, é muito mais fácil criar aplicativos .NET e bibliotecas .NET Standard.

O pacote de compatibilidade é uma extensão lógica do .NET Standard 2.0 que aumenta significativamente o conjunto de APIs. O código existente é compilado quase sem modificações. Para manter sua promessa de "o conjunto de APIs que todas as implementações do .NET fornecem", o .NET Standard não inclui tecnologias que não podem funcionar em todas as plataformas, como registro, WMI (Instrumentação de Gerenciamento do Windows) ou APIs de emissão de reflexão. O Pacote de Compatibilidade do Windows fica sobre o .NET Standard e fornece acesso a essas tecnologias somente do Windows. É especialmente útil para clientes que desejam migrar para o .NET, mas planejam permanecer no Windows, pelo menos como um primeiro passo. Nesse cenário, você pode usar tecnologias somente do Windows remove o obstáculo de migração.

Conteúdos da embalagem

O Pacote de Compatibilidade do Windows é fornecido por meio do pacote NuGet Microsoft.Windows.Compatibility e pode ser referenciado a partir de projetos destinados ao .NET ou ao .NET Standard.

Ele fornece cerca de 20.000 APIs, incluindo APIs somente para Windows e multiplataforma das seguintes áreas de tecnologia:

  • Páginas de código
  • CodeDom
  • Configuração
  • Serviços de Diretório
  • Desenho
  • ODBC
  • Permissões
  • Portas
  • Listas de controle de acesso do Windows (ACL)
  • Windows Communication Foundation (WCF)
  • Criptografia do Windows
  • Registo de Eventos do Windows
  • Windows Management Instrumentation (WMI)
  • Contadores de Desempenho do Windows
  • Registo do Windows
  • Cache do Tempo de Execução do Windows
  • Serviços Windows

Para obter mais informações, consulte a especificação do pacote de compatibilidade.

Começar agora

  1. Antes de portar, certifique-se de dar uma olhada no processo de portabilidade.

  2. Ao portar o código existente para .NET ou .NET Standard, instale o pacote NuGet Microsoft.Windows.Compatibilidade.

    Se quiser ficar no Windows, está tudo pronto.

  3. Se você quiser executar o aplicativo .NET ou a biblioteca .NET Standard no Linux ou macOS, use o analisador de compatibilidade de plataforma para encontrar o uso de APIs que não funcionarão entre plataformas.

  4. Remova os usos dessas APIs, substitua-as por alternativas entre plataformas ou proteja-as usando uma verificação 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 uma demonstração, confira o vídeo do Channel 9 do Pacote de Compatibilidade do Windows.