Phát triển .NET Core và Tương lai.
- 14-12-2023
- Toanngo92
- 0 Comments
Buổi học này cung cấp thông tin chi tiết về .NET Core và .NET Framework. Nó mô tả khi nào nên sử dụng và khi nào không nên sử dụng .NET Core và .NET Framework. Nó cũng giải thích cách di chuyển từ .NET Framework sang .NET Core và liệt kê các khác biệt giữa hai nền tảng này. Sau đó, buổi hội thảo giải thích cách chạy chương trình trên .NET Core. Cuối cùng, buổi hội thảo kết thúc với một cái nhìn tổng quan về .NET 5.0.
Trong buổi hội thảo này, chúng ta sẽ học:
- Giải thích là gì .NET Core là gì
- Liệt kê các khác biệt giữa .NET Core và .NET Framework
- Giải thích cách chạy chương trình trên .NET Core.
- Mô tả .NET 5.0
Mục lục
Giới thiệu về .NET Core
.NET Core là một nền tảng .NET Framework mã nguồn mở có sẵn trên Windows, Linux và Mac OS.
Do là một phiên bản nhẹ của .NET Framework, không phải tất cả các thư viện của framework gốc đều có thể truy cập được.
Dưới đây là những tính năng chính của .NET Core:
- Hỗ trợ đa nền tảng và Container
Hầu hết các nhà phát triển thích viết mã logic của họ một lần và sử dụng lại sau này. Điều này là một cách tiếp cận dễ dàng hơn so với việc xây dựng các ứng dụng khác nhau để nhắm mục tiêu vào nhiều nền tảng. Do đó, các nhà phát triển có thể tạo ra một ứng dụng chạy trên Windows, nhưng cũng chạy trên Linux, macOS và trên các kiến trúc khác nhau, như x86 và Advanced RISC Machine (ARM). Điều này lý tưởng trong nhiều trường hợp, bao gồm ứng dụng desktop.
- Hiệu suất cao
.NET Core có hiệu suất tương đối cao nhờ vào các bộ phận nhẹ và một số cải tiến đáng chú ý trong suốt thời gian chạy và thư viện lớp cơ bản.
- Asynchronous qua Async/Await
C# 5 cung cấp một phương pháp gọn nhẹ được biết đến là lập trình bất đồng bộ có khả năng tận dụng hỗ trợ bất đồng bộ trong .NET Framework 4.5 và cao hơn, .NET Core và Windows Runtime. Trong phương pháp này, trình biên dịch thực hiện các nhiệm vụ phức tạp, mà nếu không sẽ được thực hiện bởi các nhà phát triển. Hơn nữa, ứng dụng duy trì một cấu trúc logic tương tự như mã code đồng bộ. Do đó, người dùng được hưởng tất cả các lợi ích của lập trình bất đồng bộ mà chỉ cần rất ít công sức.
- Framework thống nhất cho MVC và Web API
Các bộ điều khiển MVC và Web API giờ đây hoàn toàn giống nhau. Chúng đã được thống nhất trong MVC 6.0. .NET Core cung cấp tính năng này để lập trình hiệu quả.
- Nhiều Môi trường và Chế độ Phát triển
Trong môi trường IT, có nhiều môi trường phát triển không được hỗ trợ bởi ba môi trường mặc định – Phát triển, Staging và Production – được cung cấp bởi Microsoft trong các thư viện ASP.NET Core. .NET Core cung cấp các môi trường khác trước ba môi trường này, như Test, Development External, Test External và Production External.
- Dependency Injection (DI)
DI là một phương pháp giúp tạo ra sự rời rạc giữa các đối tượng và các phụ thuộc của chúng. Thay vì khởi tạo các phụ thuộc trực tiếp hoặc với các tham chiếu tĩnh, các đối tượng cần thiết cho một lớp để thực hiện một nhiệm vụ được đưa cho lớp theo một cách nhất định. Nói một cách đơn giản, Dependency Injection được sử dụng để làm cho các ứng dụng không phụ thuộc vào các đối tượng của chúng hoặc để làm cho các lớp không phụ thuộc vào cách mà các đối tượng của chúng được tạo ra. Các lớp khai báo các phụ thuộc của mình thông qua hàm khởi tạo.
- Hỗ trợ cho Microservices
.NET Core hỗ trợ microservices, là một loại kiến trúc dịch vụ. Microservices là các ứng dụng phần mềm chứa các dịch vụ kinh doanh nhỏ và modul. Mỗi dịch vụ có khả năng thực thi một quy trình duy nhất, có thể được triển khai độc lập và được phát triển trong các ứng dụng lập trình khác nhau. .NET Core hỗ trợ một loạt các công nghệ có thể được tối thiểu hóa cho mỗi dịch vụ nhỏ. Nó có thể được mở rộng khi có các microservices mới được bao gồm.
Lưu ý: Mặc dù được khuyến nghị chạy .NET Framework/VS2015 trên Windows, .NET Core được ưu tiên trong thế giới mã nguồn mở, như nodejs, npm, yeoman và docker.
Khi nào và Ở đâu sử dụng .NET Core?
.NET Core có thể được sử dụng khi các container Docker được sử dụng. Docker là một chương trình máy tính thực hiện ảo hóa cấp hệ điều hành, được gọi là containerization. Thông thường, các container và kiến trúc microservices được sử dụng cùng nhau. Nhờ tính nhẹ và tính modul của nó, .NET Core hoạt động tốt với các container. Nó cho phép ứng dụng server được thiết lập đa nền tảng cho các container Docker. Tuy nhiên, .NET Framework có thể được sử dụng cho các container, nhưng kích thước hình ảnh sẽ lớn hơn.
.NET Core là lựa chọn hoàn hảo nếu có yêu cầu về hiệu suất cao và hệ thống có khả năng mở rộng. Microsoft đề xuất thực hiện .NET Core cùng với ASP.NET Core để đạt được hiệu suất và khả năng mở rộng tốt nhất. .NET Core có thể được sử dụng nếu người dùng đang thực thi nhiều phiên bản .NET song song. Để thiết lập các ứng dụng có phụ thuộc vào các phiên bản khác nhau của framework trong .NET, tốt nhất là sử dụng .NET Core.
.NET Core có thể được sử dụng khi cần điều khiển giao diện dòng lệnh (CLI). Một số người dùng có thể thích làm việc trong các trình soạn thảo nhẹ và điều khiển giao diện dòng lệnh. .NET Core cung cấp CLI cho tất cả các nền tảng được hỗ trợ và nó yêu cầu cài đặt tối thiểu trên các máy sản xuất.
Khi nào không nên sử dụng .NET Core
Có rất nhiều trường hợp khi có thể sử dụng .NET Core, tuy nhiên, có những tình huống mà không được khuyến nghị sử dụng. Mặc dù hiện tại, có thể không phải là lựa chọn tốt nhất trong một số tình huống, nhưng với sự phát triển liên tục trong tương lai, nó có thể trở nên phù hợp với hầu hết các trường hợp sử dụng.
Dưới đây là một số tính năng hiện tại không được hỗ trợ trong .NET Core:
- Một số tính năng và thư viện .NET cụ thể và các tiện ích mở rộng như Entity Framework Core và ASP.NET Web Forms
- Ứng dụng Windows Forms và WPF
- ASP.NET Web Forms
- Công cụ Windows Communication Foundation (WCF)
- Hỗ trợ thư viện bên thứ ba
- Hỗ trợ một phần cho VB.NET và F#
- SignalR
Lưu ý: Ngoài ra, vẫn có một số chức năng của .NET Framework không được hỗ trợ trong .NET Core. Ví dụ, Entity Framework Core không khớp với Entity Framework v6. Khi có yêu cầu cho một ứng dụng làm việc với Windows Registry, WMI hoặc các API cụ thể của Windows khác, nó sẽ không hoạt động.
.NET Core 2.0 cung cấp tính tương thích giữa .NET Framework và .NET Core. Tuy nhiên, vẫn có thể có vấn đề tương thích nếu thư viện lớp đang sử dụng bất kỳ API .NET Framework nào không được hỗ trợ. Việc thiếu API .NET Framework mở cửa sổ cho việc phát triển và tạo ra các thư viện mới không tương thích với .NET Core.
So sánh .NET Framework với .NET Core
Vì .NET Framework cũng có thể làm việc với Docker (một nền tảng mã nguồn mở cho phép nhà phát triển đóng gói ứng dụng vào các container) và Windows Containers, việc sử dụng nó trong các tình huống sau là khả thi:
- Khi đã sử dụng
Thay vì di chuyển sang .NET Core, người dùng có thể mở rộng ứng dụng để tiếp tục sử dụng nó. Ví dụ, một nhà phát triển có thể tạo ra một dịch vụ Web mới trong ASP .NET Core.
- Khi sử dụng các thư viện bên thứ ba hoặc gói NuGet không được hỗ trợ trong NET Core
Mặc dù .NET Core đang được sử dụng rộng rãi, nhưng .NET Framework phải được sử dụng nếu có yêu cầu làm việc với các thư viện .NET Framework không tương thích. NuGet là trình quản lý gói mã nguồn mở cho NET và các nền tảng phát triển của Microsoft khác. Nó chứa các công cụ khách có khả năng tạo và tiêu thụ các gói.
- Khi sử dụng các công nghệ chưa được cung cấp bởi .NET Core
Nếu bạn phải làm việc với các thư viện/công nghệ hiện không có trong .NET Core, nên sử dụng .NET Framework.
- Khi .NET Core không được hỗ trợ bởi nền tảng.
.NET Core không được hỗ trợ bởi tất cả các nền tảng của Microsoft và bên thứ ba, ví dụ như một số dịch vụ của Azure. Tuy nhiên, một số vấn đề có thể phát sinh ngay cả với các dịch vụ được hỗ trợ, nhưng điều này thường xảy ra trong quá trình sử dụng. Với .NET Core trở nên rộng rãi, người dùng có thể dễ dàng tìm kiếm hướng dẫn và giải pháp để vượt qua các vấn đề này.
Dưới đây là những tình huống mà .NET Framework không nên được sử dụng:
- Khi cần nhiều nền tảng hệ điều hành
- Khi cần hiệu suất và khả năng mở rộng cao
- Khi .NET Core hoạt động tốt
- Khi cần framework mã nguồn mở
Di dời từ .NET Framework sang .NET Core
Dưới đây là các bước để di dời một ứng dụng từ .NET Framework sang .NET Core:
- Đánh giá các phụ thuộc của bên thứ Ba
Công cụ Visual Studio có một tùy chọn có tên Manage Packages, có thể được sử dụng để cài đặt các API của bên thứ ba có thể được tải xuống thông qua Nuget Package Manage giúp di dời sang .NET Core:
- netstandard1.0
- netstandard1.1
- netstandard1.2
- netstandard1.3
- netstandard1.4
- netstandard1.5
- portable-net45-win8
- portable-win8-wpa8
- portable-net451-win81
2. Tập trung vào Thư viện .NET Standard
Bởi vì thư viện .NET Standard có thể truy cập trên tất cả các thời gian chạy NET, nhắm đến nó là một cách tiếp cận lý tưởng để tạo ra một thư viện lớp chéo nền tảng. Có nhiều phiên bản được cung cấp trên tám nền tảng. Trong trường hợp dự án nhắm mục tiêu vào một phiên bản cũ hơn, không được phép tham chiếu đến một dự án nhắm mục tiêu vào một phiên bản mới hơn. Tốt nhất là chọn phiên bản NET Standard cũ nhất để sử dụng cho tất cả các dự án.
3. Điều chỉnh Mục tiêu của Dự án
Các dự án mà người dùng quyết định di dời phải được nhắm mục tiêu vào .NET Framework 4.6.2. Điều này là để đảm bảo rằng các API thay thế cho các mục tiêu cụ thể của .NET Framework có thể được sử dụng cho các API không được hỗ trợ. Điều này có thể được thực hiện dễ dàng trong Visual Studio bằng lệnh Target Framework và việc biên dịch lại các dự án.
4. Di dời mã kiểm tra
Vì việc di dời mã sang NET Core là một sự thay đổi quan trọng, việc kiểm tra bằng các framework kiểm tra sau đây được khuyến nghị:
- Unit
- Nunit
- MSTest
5. Thực hiện quá trình chuyển đổi
Phương pháp tốt nhất để chuyển đổi mã là dựa trên cách khung làm việc được cấu trúc.
Tuy nhiên, việc chia cắt cơ sở mã nguồn thành các đoạn đơn giản như sau đã được chứng minh hiệu quả:
- Xác định cơ sở của thư viện. Điều này có thể là các mô hình dữ liệu hoặc các phương thức mà mọi thành phần khác phải sử dụng.
- Sao chép cơ sở vào một dự án .NET Core mới.
- Thực hiện bất kỳ sửa đổi nào cần thiết để biên dịch mã.
- Sao chép lớp mã tiếp theo và lặp lại quá trình.
Sự khác biệt giữa .NET Framework và .NET Core
.NET Framework | .NET Core |
Nó đã được cung cấp dưới dạng được cấp phép và khung phần mềm độc quyền. Sau đó, Microsoft đã tạo ra một số thành phần mã nguồn mở. | Microsoft phát hành .NET Core như một framework mã nguồn mở. |
Nó cho phép người dùng tạo các ứng dụng cho một nền tảng duy nhất – Windows. | .NET Core là một nền tảng đa nền tảng và có thể chứa ba hệ điều hành khác nhau – Windows, OS X và Linux. |
Nó phải được thiết lập như một gói duy nhất và môi trường chạy trên Windows. | Vì nó là đa nền tảng, nó có thể được đóng gói và thiết lập mà không phụ thuộc vào hệ điều hành cơ bản. |
Nó sử dụng CLR (Common Language Runtime) để quản lý thư viện và cho mục đích biên dịch. | Nó sử dụng CLR được thiết kế lại gọi là CoreCLR và cung cấp một bộ thư viện modul được biết đến là CoreFX. |
Nếu sử dụng ứng dụng Web với .NET Framework, người dùng có thể sử dụng một framework ứng dụng Web mạnh mẽ như ASP.NET. | Nó có phiên bản được thiết kế lại của ASP.NET. |
Với .NET Framework, người dùng phải triển khai ứng dụng web chỉ trên Internet Information Server. | Các ứng dụng web được tạo ra bằng ASP.NET Core có thể chạy theo nhiều cách. Những ứng dụng này có thể được triển khai trực tiếp trên đám mây hoặc người dùng có thể tự tổ chức chúng bằng cách tạo các quy trình chủ nhà cụ thể. |
Nó có rất nhiều API mở rộng để tạo ứng dụng dựa trên đám mây. | Nó có những tính năng giúp dễ dàng việc tạo và triển khai ứng dụng dựa trên đám mây. |
Nó không có bất kỳ framework hoặc công cụ mạnh mẽ nào để đơn giản hóa việc phát triển ứng dụng di động. | Nó tương thích với Xamarin thông qua Thư viện Tiêu chuẩn .NET. Do đó, người dùng có thể sử dụng Xamarin để viết ứng dụng di động đa nền tảng bằng C# bằng cách sử dụng cùng một cơ sở mã và tập hợp API. |
Nó cung cấp ít lựa chọn hơn cho việc phát triển hệ thống hướng dịch vụ nhỏ (microservice) so với .NET Core. | Nó cho phép tạo ra các hệ thống hướng dịch vụ nhỏ (microservice) một cách nhanh chóng. |
Để đạt được tính mở rộng, nó yêu cầu cài đặt cơ sở hạ tầng bổ sung. | Nó hiệu quả hơn so với .NET Framework khi nói về việc tăng cường hiệu suất và khả năng mở rộng của ứng dụng mà không cần triển khai thêm phần cứng hoặc cơ sở hạ tầng. |
Nó có thể sử dụng tất cả các tính năng có trong .NET Framework. | Nó không hỗ trợ tất cả các tính năng và chức năng được cung cấp bởi phiên bản mới nhất của .NET Framework. |
Bảng bên dưới tóm tắt các tính năng và điểm nổi bật của cả hai (.NET Framework hoặc .NET Core)
Tính năng | .NET Framework | .NET Core |
Hệ thống hiệu suất cao và có thể mở rộng | x | |
Hỗ trợ vùng chứa Docker | x | x |
Dựa nhiều vào dòng lệnh | x | |
Yêu cầu đa nền tảng | x | |
Sử dụng microservice | x | x |
Ứng dụng web tập trung vào giao diện người dùng | x | |
Ứng dụng khách Windows sử dụng Windows Forms và WPF | x | |
Đã có môi trường và hệ thống được cấu hình sẵn | x | |
Phiên bản ổn định cho nhu cầu xây dựng và triển khai ngay lập tức | x | |
Có đội ngũ .NET giàu kinh nghiệm | ||
Thời gian không phải là vấn đề, các thử nghiệm có thể chấp nhận được và không cần vội vàng triển khai |
Chạy 1 chương trình trên .Net Core
Các bước sau đây để tạo một ứng dụng console đơn giản ‘HelloWorld’ trên .NET Core:
- Mở Visual Studio 2019. Nhấp vào File > New > Project. Hộp thoại New Project sẽ xuất hiện. Chọn C# mục Windows và sau đó, Console. Tiếp theo, chọn mẫu dự án Console App như hình ảnh được hiển thị trong hình bên dưới.
2. Chọn Next
3. Cung cấp tên ‘HelloWorld’ trong trường Project name và nhấp vào OK.
Visual Studio sử dụng mẫu để phát triển dự án. Mẫu Ứng dụng Console cho .NET Core có một lớp (Program
) sử dụng một phương thức (Main
), nhận một mảng chuỗi làm đối số như được hiển thị trong hình bên dưới. Main đóng vai trò là điểm vào của ứng dụng, đó là phương thức được tự động gọi bởi thời gian chạy khi ứng dụng được khởi động. Các đối số dòng lệnh được cung cấp khi ứng dụng được khởi động được lưu trữ trong mảng args
.
Mẫu tạo ra một ứng dụng HelloWorld đơn giản. Phương thức Console.WriteLine()
được gọi, hiển thị chuỗi ‘Hello World!’ trên cửa sổ console. Trong thanh công cụ, việc nhấp vào nút tên dự án (trong trường hợp này là HelloWorld) được đứng trước bởi mũi tên màu xanh sẽ thực thi chương trình trong chế độ Debug. Cửa sổ console chỉ hiển thị trong một khoảng thời gian ngắn trước khi đóng lại.
Điều này xảy ra khi phương thức Main
kết thúc và ứng dụng chấm dứt ngay lập tức.
- Để tạm dừng ứng dụng trước khi đóng cửa sổ console, chèn mã sau sau khi gọi phương thức
Console.WriteLine()
:
Console.WriteLine("Press any key to continue...");
Console.ReadLine();
Mã này yêu cầu người dùng nhấn bất kỳ phím nào và tạm dừng chương trình cho đến khi một phím được nhấn. Hình bên dưới, cho thấy chương trình HelloWorld đã được cập nhật.
2. Trên thanh menu, nhấp vào Build > Build Solution. Điều này biên dịch chương trình thành mã IL (Intermediate Language), sau đó được biến đổi thành mã nhị phân bởi trình biên dịch Just-In-Time (JIT), tương tự như cách nó xảy ra trong các ứng dụng .NET thông thường.
3. Thực thi chương trình. Hình bên dưới hiển thị kết quả của chương trình.
Sau đó, bạn sẽ được nhắc nhở nhấn bất kỳ phím nào để đóng cửa sổ console. Những bước này minh họa việc tạo một ứng dụng console cơ bản bằng .NET Core. Tương tự, bạn cũng có thể tạo ra các ứng dụng phức tạp hơn bằng cách sử dụng nền tảng này.
.NET 5.0 và Tương lai
Trong tháng 9 năm 2019, Microsoft phát hành .NET Core 3. Phiên bản này của .NET Core đã thêm hỗ trợ cho việc phát triển ứng dụng Windows desktop và cũng bao gồm cải tiến đáng kể về hiệu suất trong toàn bộ Base Class Library (BCL). Sau đó, phiên bản .NET Core 3.1 được ra mắt vào tháng 12 năm 2019.
Tuy nhiên, sau .NET Core 3.1, Microsoft bỏ ý định về việc nâng cấp tiếp theo và thay vào đó tập trung vào việc tạo ra một nền tảng .NET thống nhất duy nhất sẽ kết hợp lợi ích của .NET Core với .NET Framework. Nền tảng thống nhất này được ra mắt vào ngày 10 tháng 11 năm 2020 với tên gọi là .NET 5.0. Không còn ‘Core’ trong tên thương hiệu cho nền tảng mới này. Theo Microsoft, việc rút ngắn tên này nhằm đơn giản hóa việc sử dụng và truyền đạt rằng .NET 5.0 có khả năng và hành vi thống nhất trên máy tính để bàn, laptop và các môi trường đám mây. Với .NET 5.0, mã nguồn và tệp dự án của nhà phát triển sẽ trông và cảm nhận giống nhau bất kể loại ứng dụng họ tạo. Nhà phát triển sẽ có quyền truy cập vào cùng một thời gian chạy, API và khả năng ngôn ngữ với mỗi ứng dụng. Một trong những mục tiêu khác của việc tạo ra .NET là mở rộng khả năng của .NET bằng cách kết hợp những điểm mạnh của .NET Core, .NET Framework, Xamarin và Mono.
Ước tính .NET 5.0 có khoảng 20% tăng hiệu suất so với .NET Core 3.1 và hiệu suất máy chủ .NET 5.0 nhanh hơn khoảng 60% so với .NET Core 3.1.
Hiệu suất của client .NET 5.0 nhanh hơn khoảng 230% so với .NET Core 3.1.
.NET 5.0 hỗ trợ tất cả các phiên bản Visual Studio được phát hành sau Visual Studio 2017. Visual Studio 2019 hỗ trợ .NET 5.0 và cũng tương thích với C# 9.0. Hình bên dưới mô tả kiến trúc của nền tảng .NET 5.0.
.NET 5.0 bao gồm cải tiến thư viện cũng như cải tiến ngôn ngữ. Đối với các nhà phát triển, ưu điểm lớn nhất của .NET 5.0 là họ hiện có thể sử dụng một bộ APIs, ngôn ngữ và công cụ duy nhất để mục tiêu đến một loạt các loại ứng dụng, chẳng hạn như di động, đám mây, desktop và IoT.
Thống qua .NET 5.0, các ứng dụng .NET có thể chạy natively trên Windows Arm64, điều này dẫn đến hiệu suất tốt hơn.
Khi các nhà phát triển tạo hoặc xây dựng ứng dụng, cuối cùng, họ triển khai nó để người dùng cuối có thể sử dụng. Mục tiêu triển khai có thể là máy chủ Web, dịch vụ đám mây, dòng lệnh hoặc máy khách. .NET 5.0 làm cho việc triển khai dễ dàng hơn. Một trong những cách mà nó làm điều này là bằng cách hỗ trợ công cụ ClickOnce đã trở thành một lựa chọn triển khai phổ biến của .NET Framework trong nhiều năm. Công cụ này có thể được sử dụng cho ứng dụng Windows .NET 5.0 cũng. Nó giúp các nhà phát triển tạo ra các ứng dụng dựa trên Windows có khả năng tự cập nhật và có thể được cài đặt và thực thi với ít tương tác người dùng nhất có thể. Đề xuất rằng cho tất cả các phát triển mới, từ nay về sau, nên sử dụng .NET 5.0 hoặc các phiên bản cao hơn.