4 điểm bởi dimohy 2023-01-08 | 5 bình luận | Chia sẻ qua WhatsApp
  • .NET AOT là gì?
  • Triển khai Native AOT

.NET 7 giờ đây có thể tạo mã native kích thước nhỏ khoảng 2 MB cho ứng dụng console trên Windows, Linux và macOS mà không cần .NET runtime, và có thể chạy độc lập không phụ thuộc.

5 bình luận

 
dimohy 2023-10-12

macOS vốn chưa được hỗ trợ trong .NET 7 sẽ được .NET 8 chính thức hỗ trợ.
https://learn.microsoft.com/en-us/dotnet/…

 
kunggom 2023-01-08

Theo tài liệu chính thức của Microsoft, ngoài những hạn chế mang tính căn bản do việc biên dịch sẵn sang mã native, tính năng này còn có một số hạn chế bổ sung vì vẫn đang ở giai đoạn đầu phát triển. Hiện vẫn chưa áp dụng được cho ứng dụng ASP.NET Core, cần có hỗ trợ ở cấp độ thư viện, và cũng còn giới hạn trong việc gỡ lỗi hay profiling. Nói thêm thì kiến trúc CPU chỉ hỗ trợ x64 và ARM64, nên không thể tạo ứng dụng cho Windows 32-bit. Và một điểm đáng chú ý là thông qua tính năng này, có thể tạo thư viện tĩnh để dùng trong các ứng dụng không phải .NET.

Khi công bố .NET 7, Microsoft đã gọi đây là “nền tảng dành cho ứng dụng cloud-native”. Để phục vụ mục tiêu đó, họ cũng đã bổ sung tính năng triển khai ứng dụng dưới dạng Docker container. Có lẽ hỗ trợ AOT cũng được thêm vào như một công cụ để tối ưu dung lượng image và thời gian khởi động của các ứng dụng đã được container hóa như vậy. Tuy nhiên, do hỗ trợ cho ASP.NET Core vẫn còn đang được phát triển, nên có lẽ sẽ còn phải khá lâu nữa tính năng này mới thực sự phát huy giá trị trong các ứng dụng cloud-native.

Tham khảo:

 
dimohy 2023-01-08

Cảm ơn bạn đã phản hồi rất nhiệt tình.

Ứng dụng console đã vượt qua giai đoạn preview và bước vào giai đoạn phát hành chính thức, nên có thể dùng để phát triển ứng dụng thực tế.

Đúng như bạn nói, vì vẫn đang ở giai đoạn đầu nên hiện vẫn chưa hỗ trợ ASP.NET Core, WPF, Windows Forms hay WinUI.

Ngoài ra, nó cũng chưa phù hợp với nhu cầu triển khai bằng container Docker, vì hiện vẫn chưa hỗ trợ ASP.NET Core.

Tương tự như bạn đã đề cập, do được biên dịch thành mã native nên không thể sử dụng phần lớn tính năng của Reflector. Có vẻ điểm này không hẳn là một hạn chế xuất phát từ giai đoạn đầu, mà là do sự khác biệt về đặc tính giữa mã IL và mã native.

Ý nghĩa hiện tại của NativeAOT có lẽ là ở chỗ nó cho phép triển khai rất tốt mã native thuần túy không phụ thuộc gì trên Windows, Linux và macOS, ít nhất ở cấp độ ứng dụng console.

 
kunggom 2023-01-09

Không phải macOS. Nếu bạn xem tài liệu Microsoft Learn mà tôi đã liên kết thì sẽ thấy hiện tại nền tảng được hỗ trợ cho tính năng này chỉ có Windows và Linux. macOS có lẽ sẽ được bổ sung sau.
Thời gian rồi sẽ giải quyết thôi, nhưng tôi nghĩ hiện vẫn còn khá nhiều trường hợp mà tính năng này khó dùng trong môi trường thực tế.

 
dimohy 2023-01-09

Đúng là macOS hiện vẫn chưa được hỗ trợ.