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
Antes de portar, certifique-se de dar uma olhada no processo de portabilidade.
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.
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.
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.