4 pontos por dimohy 2023-01-08 | 5 comentários | Compartilhar no WhatsApp
  • O que é .NET AOT?
  • Implantação Native AOT

O .NET 7 agora pode gerar, para aplicações de console, código nativo pequeno, na faixa de 2 MB, para Windows, Linux e macOS sem o runtime do .NET, e executá-lo sem dependências.

5 comentários

 
dimohy 2023-10-12

O macOS, que não era compatível no .NET 7, passará a ter suporte oficial no .NET 8.
https://learn.microsoft.com/en-us/dotnet/…

 
kunggom 2023-01-08

Pela documentação oficial da Microsoft, além das limitações fundamentais decorrentes da compilação nativa antecipada, esse recurso também tem algumas restrições adicionais por ainda estar em estágio inicial de desenvolvimento. Ele ainda não se aplica a apps ASP.NET Core, exige suporte no nível de biblioteca, e ainda há limitações em depuração e profiling. Além disso, a arquitetura de CPU suportada é apenas x64 e ARM64, então não é possível criar apps para Windows 32 bits. E um ponto que chama atenção é que, por meio desse recurso, é possível criar bibliotecas estáticas que podem ser usadas por apps que não sejam .NET.

Ao anunciar o .NET 7, a Microsoft disse que ele é uma "plataforma para apps cloud-native". Para isso, também adicionou o recurso de implantar apps como contêineres Docker. Imagino que o suporte a AOT também tenha sido adicionado como uma ferramenta para otimizar o tamanho da imagem e o tempo de inicialização desses apps conteinerizados. Mas, como o suporte ao ASP.NET Core ainda está em andamento, provavelmente ainda vai demorar um pouco até que esse recurso realmente brilhe em apps cloud-native.

Referências:

 
dimohy 2023-01-08

Obrigado pela resposta detalhada.

Os aplicativos de console já passaram da fase de preview para a de lançamento estável, então já é possível desenvolver aplicações reais com eles.

Como você mencionou, por ainda estar em estágio inicial, ainda não há suporte para ASP.NET Core, WPF, Windows Forms ou WinUI.

Além disso, isso não atende à necessidade de fazer deploy em contêineres Docker. Afinal, ASP.NET Core ainda não é suportado.

Da mesma forma, como você comentou, por ser compilado em código nativo, não é possível usar a maior parte das funcionalidades do Reflector. Essa limitação parece decorrer menos do fato de estar em estágio inicial e mais das diferenças de características entre código IL e código nativo.

Parece que o significado atual do NativeAOT é que ele permite distribuir muito bem código nativo puro, sem dependências, nos níveis de aplicativos de console, em Windows, Linux e macOS.

 
kunggom 2023-01-09

Não no macOS. Como dá para ver na documentação do Microsoft Learn que eu linkei, no momento as plataformas compatíveis com esse recurso são apenas Windows e Linux. O macOS provavelmente será adicionado depois.
O tempo resolverá isso, mas acho que ainda há muitos casos em que esse recurso é difícil de usar em produção.

 
dimohy 2023-01-09

Está correto dizer que o macOS ainda não é compatível.