.NET Core - Hướng dẫn nhanh

.NET Core là nền tảng phát triển mục đích chung mới nhất được duy trì bởi Microsoft. Nó hoạt động trên các nền tảng khác nhau và đã được thiết kế lại theo cách làm cho .NET nhanh chóng, linh hoạt và hiện đại. Đây là một trong những đóng góp lớn của Microsoft. Các nhà phát triển hiện có thể tạo các ứng dụng Android, iOS, Linux, Mac và Windows bằng .NET, tất cả đều ở dạng Mã nguồn mở.

Trong hướng dẫn này, chúng tôi sẽ trình bày về .NET Core và một số cải tiến mới bao gồm các bản cập nhật .NET Framework, .NET Standard và Universal Windows Platform, v.v.

Đặc điểm của .NET Core

Sau đây là các đặc điểm chính của .NET Core:

Mã nguồn mở

  • .NET Core là một triển khai mã nguồn mở, sử dụng giấy phép MIT và Apache 2.

  • .NET Core là một dự án .NET Foundation và có sẵn trên GitHub.

  • Là một dự án mã nguồn mở, nó thúc đẩy quá trình phát triển minh bạch hơn và thúc đẩy một cộng đồng tích cực và gắn bó.

Đa nền tảng

  • Ứng dụng được triển khai trong .NET Core có thể chạy và mã của nó có thể được sử dụng lại bất kể mục tiêu nền tảng của bạn là gì.

  • Nó hiện hỗ trợ ba hệ điều hành chính (OS)

    • Windows

    • Linux

    • MacOS

  • Hệ điều hành (OS), CPU và kịch bản ứng dụng được hỗ trợ sẽ phát triển theo thời gian, do Microsoft, các công ty khác và cá nhân cung cấp.

Triển khai linh hoạt

  • Có thể có hai kiểu triển khai cho các ứng dụng .NET Core -

    • Triển khai phụ thuộc vào khung

    • Triển khai khép kín

  • Với việc triển khai phụ thuộc vào khuôn khổ, ứng dụng của bạn phụ thuộc vào phiên bản .NET Core trên toàn hệ thống mà ứng dụng của bạn và các phụ thuộc bên thứ ba được cài đặt.

  • Với việc triển khai khép kín, phiên bản .NET Core được sử dụng để xây dựng ứng dụng của bạn cũng được triển khai cùng với ứng dụng của bạn và các phụ thuộc của bên thứ ba và có thể chạy song song với các phiên bản khác.

Các công cụ dòng lệnh

  • Tất cả các kịch bản sản phẩm có thể được thực hiện tại dòng lệnh.

Tương thích

  • .NET Core tương thích với .NET Framework, Xamarin và Mono, thông qua Thư viện chuẩn .NET

Mô-đun

  • .NET Core được phát hành thông qua NuGet trong các gói lắp ráp nhỏ hơn.

  • .NET Framework là một tập hợp lớn chứa hầu hết các chức năng cốt lõi.

  • .NET Core được cung cấp dưới dạng các gói nhỏ hơn tập trung vào tính năng.

  • Cách tiếp cận mô-đun này cho phép các nhà phát triển tối ưu hóa ứng dụng của họ bằng cách chỉ bao gồm các gói NuGet mà họ cần trong ứng dụng của mình.

  • Các lợi ích của diện tích bề mặt ứng dụng nhỏ hơn bao gồm bảo mật chặt chẽ hơn, giảm dịch vụ, cải thiện hiệu suất và giảm chi phí trong mô hình trả tiền cho những gì bạn sử dụng.

Nền tảng .NET Core

.NET Core Platform chứa các phần chính sau:

  • .NET Runtime - Nó cung cấp một hệ thống kiểu, tải lắp ráp, một bộ thu gom rác, tương tác gốc và các dịch vụ cơ bản khác.

  • Fundamental Libraries - Một tập hợp các thư viện khung, cung cấp các kiểu dữ liệu nguyên thủy, kiểu cấu thành ứng dụng và các tiện ích cơ bản.

  • SDK & Compiler - Một bộ công cụ SDK và trình biên dịch ngôn ngữ cho phép trải nghiệm nhà phát triển cơ sở, có sẵn trong .NET Core SDK.

  • ‘dotnet’ app host- Nó được sử dụng để khởi chạy các ứng dụng .NET Core. Nó chọn thời gian chạy và lưu trữ thời gian chạy, cung cấp chính sách tải lắp ráp và khởi chạy ứng dụng. Máy chủ lưu trữ tương tự cũng được sử dụng để khởi chạy các công cụ SDK theo cách tương tự.

Trong chương này, chúng ta sẽ thảo luận về các phụ thuộc khác nhau mà bạn cần triển khai và chạy. Chúng bao gồm các ứng dụng .NET Core trên máy Windows được phát triển bằng Visual Studio.

Các phiên bản Windows được hỗ trợ

.NET Core được hỗ trợ trên các phiên bản Windows sau:

  • Windows 7 SP1
  • Windows 8.1
  • Windows 10
  • Windows Server 2008 R2 SP1 (Máy chủ đầy đủ hoặc Lõi máy chủ)
  • Windows Server 2012 SP1 (Full Server hoặc Server Core)
  • Windows Server 2012 R2 SP1 (Máy chủ đầy đủ hoặc Lõi máy chủ)
  • Windows Server 2016 (Máy chủ đầy đủ, Máy chủ Core hoặc Máy chủ Nano)

Sự phụ thuộc

  • Nếu bạn đang chạy ứng dụng .NET Core của mình trên các phiên bản Windows sớm hơn Windows 10 và Windows Server 2016, thì ứng dụng này cũng sẽ yêu cầu Visual C ++ Redistributable.

  • Phần phụ thuộc này được tự động cài đặt cho bạn nếu bạn sử dụng trình cài đặt .NET Core.

  • Bạn cần cài đặt thủ công Visual C ++ Redistributable cho Visual Studio 2015 nếu bạn đang cài đặt .NET Core thông qua tập lệnh trình cài đặt hoặc triển khai ứng dụng .NET Core độc ​​lập.

  • Đối với máy Windows 7 và Windows Server 2008, bạn cần đảm bảo rằng bản cài đặt Windows của mình được cập nhật và cũng bao gồm bản sửa lỗi KB2533623 được cài đặt thông qua Windows Update.

Điều kiện tiên quyết với Visual Studio

  • Để phát triển các ứng dụng .NET Core bằng cách sử dụng .NET Core SDK, bạn có thể sử dụng bất kỳ trình soạn thảo nào bạn chọn.

  • Tuy nhiên, nếu bạn muốn phát triển các ứng dụng .NET Core trên Windows bằng Visual Studio, bạn có thể sử dụng hai phiên bản sau:

    • Visual Studio 2015

    • Visual Studio 2017 RC

  • Các dự án được tạo bằng Visual Studio 2015 sẽ dựa trên project.json theo mặc định trong khi các dự án được tạo bằng Visual Studio 2017 RC sẽ luôn dựa trên MSBuild.

Trong chương này, chúng ta sẽ thảo luận về Thiết lập Môi trường của .NET Core. Đây là một thiết kế lại đáng kể của .NET Framework. Để sử dụng .NET Core trong ứng dụng của bạn, có hai phiên bản bạn có thể sử dụng:

  • Visual Studio 2015
  • Visual Studio 2017 RC

Visual Studio 2015

Để sử dụng Visual Studio 2015, bạn phải cài đặt những thứ sau:

  • Microsoft Visual Studio 2015 Cập nhật 3
  • Microsoft .NET Core 1.0.1 - VS 2015 Tooling Preview 2

Microsoft cung cấp phiên bản studio trực quan miễn phí cũng chứa SQL Server và có thể được tải xuống từ https://www.visualstudio.com/en-us/downloads/download-visual-studio-vs.aspx và Microsoft .NET Core 1.0.1 - VS 2015 Tooling Preview 2 có thể được tải xuống từ https://www.visualstudio.com/downloads/

Bạn cũng có thể làm theo hướng dẫn cài đặt trên Url sau https://www.microsoft.com/net/core/#windowsvs2017

Cài đặt Visual Studio 2015

Làm theo các bước sau để cài đặt Visual Studio 2015 -

Step 1- Sau khi quá trình tải xuống hoàn tất, hãy chạy trình cài đặt. Hộp thoại sau sẽ được hiển thị.

Step 2 - Bấm Install để bắt đầu quá trình cài đặt.

Step 3 - Sau khi cài đặt hoàn tất, bạn sẽ thấy hộp thoại sau.

Step 4 - Đóng hộp thoại này và khởi động lại máy tính của bạn nếu được yêu cầu.

Step 5- Mở Visual Studio từ Start Menu; bạn sẽ nhận được hộp thoại sau. Có thể mất vài phút để tải và cuối cùng được sử dụng lần đầu tiên.

Step 6 - Sau khi nó được tải, bạn sẽ thấy màn hình sau.

Step 7 - Sau khi cài đặt Visual Studio xong, hãy đóng Visual Studio và khởi chạy Microsoft .NET Core - VS 2015 Tooling Preview 2.

Step 8 - Đánh dấu vào hộp kiểm và nhấp vào Cài đặt.

Step 9 - Sau khi cài đặt hoàn tất, bạn sẽ thấy hộp thoại sau.

Bây giờ bạn đã sẵn sàng để khởi động ứng dụng của mình bằng .NET Core.

Visual Studio 2017

Trong hướng dẫn này, chúng tôi sẽ sử dụng Visual Studio 2015, nhưng nếu bạn muốn sử dụng Visual Studio 2017, bản phát hành thử nghiệm của công cụ .NET Core cho Visual Studio được bao gồm trong Visual Studio 2017 RC và bạn có thể xem hướng dẫn cài đặt tại đây https://www.microsoft.com/net/core/#windowsvs2017

Visual Studio 2015 cung cấp một môi trường phát triển đầy đủ tính năng để phát triển các ứng dụng .NET Core. Trong chương này, chúng ta sẽ tạo một dự án mới bên trong Visual Studio. Khi bạn đã cài đặt công cụ Visual Studio 2015, bạn có thể bắt đầu xây dựng Ứng dụng .NET Core mới.

bên trong New Project hộp thoại, trong danh sách Mẫu, hãy mở rộng nút Visual C # và chọn .NET Core và bạn sẽ thấy ba mẫu dự án mới sau đây

  • Thư viện lớp (.NET Core)
  • Ứng dụng bảng điều khiển (.NET Core)
  • Ứng dụng Web ASP.NET Core (.NET Core)

Trong ngăn giữa trên hộp thoại Dự án mới, chọn Ứng dụng điều khiển (.NET Core) và đặt tên là "FirstApp", sau đó nhấp vào OK.

Visual Studio sẽ mở dự án mới được tạo và bạn sẽ thấy trong cửa sổ Solution Explorer tất cả các tệp có trong dự án này.

Để kiểm tra xem ứng dụng bảng điều khiển lõi .NET có hoạt động không, chúng ta hãy thêm dòng sau.

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Threading.Tasks; 
  
namespace FirstApp { 
   public class Program { 
      public static void Main(string[] args) { 
         Console.WriteLine("Hello guys, welcome to .NET Core world!"); 
      } 
   } 
}

Bây giờ, hãy chạy ứng dụng. Bạn sẽ thấy kết quả sau.

.NET Core hỗ trợ tích phân số chuẩn và các nguyên hàm dấu phẩy động. Nó cũng hỗ trợ các loại sau:

  • System.Numerics.BigInteger là một kiểu tích phân không có giới hạn trên hoặc dưới.

  • System.Numerics.Complex là một kiểu biểu thị số phức.

  • Một tập hợp các kiểu vectơ kích hoạt một lệnh nhiều dữ liệu (SIMD) trong không gian tên System.Numerics.

Các loại tích phân

.NET Core hỗ trợ cả số nguyên có dấu và không dấu có độ dài khác nhau từ một byte đến tám byte. Tất cả các số nguyên là kiểu giá trị.

Bảng sau đây đại diện cho các loại tích phân và kích thước của chúng;

Kiểu Đã ký / Chưa ký Kích thước (byte) Giá trị tối thiểu Gia trị lơn nhât
Byte Chưa ký 1 0 255
Int16 Đã ký 2 −32,768 32.767
Int32 Đã ký 4 −2.147.483.648 2.147.483.647
Int64 Đã ký số 8 −9.223.372.036.854.775.808 9.223.372.036.854.775.807
SByte Đã ký 1 -128 127
UInt16 Chưa ký 2 0 65.535
UInt32 Chưa ký 4 0 4.294.967.295
UInt64 Chưa ký số 8 0 18.446.744.073.709.551.615

Mỗi kiểu tích phân hỗ trợ một bộ tiêu chuẩn gồm các toán tử số học, so sánh, đẳng thức, chuyển đổi rõ ràng và chuyển đổi ngầm định.

Bạn cũng có thể làm việc với các bit riêng lẻ trong một giá trị số nguyên bằng cách sử dụng lớp System.BitConverter.

Các loại dấu phẩy động

.NET Core bao gồm ba kiểu dấu phẩy động nguyên thủy, được hiển thị trong bảng sau.

Kiểu Kích thước (byte) Giá trị tối thiểu Gia trị lơn nhât
Gấp đôi số 8 −1.79769313486232e308 1.79769313486232e308
Độc thân 4 −3.402823e38 3,402823e38
Thập phân 16 −79.228.162.514.264.337.593,5 43.950.335 79.228.162.514.264.337.593.543,9 50.335
  • Mỗi kiểu dấu phẩy động hỗ trợ một tập hợp tiêu chuẩn gồm các toán tử số học, so sánh, đẳng thức, chuyển đổi rõ ràng và chuyển đổi ngầm định.

  • Bạn cũng có thể làm việc với các bit riêng lẻ trong các giá trị Đôi và Đơn bằng cách sử dụng lớp BitConverter.

  • Cấu trúc Decimal có các phương thức riêng, Decimal.GetBits và Decimal.Decimal (Int32 ()), để làm việc với các bit riêng lẻ của giá trị thập phân, cũng như bộ phương pháp riêng để thực hiện một số phép toán bổ sung.

BigInteger

  • System.Numerics.BigInteger là một kiểu bất biến đại diện cho một số nguyên lớn tùy ý mà giá trị trên lý thuyết không có giới hạn trên hoặc dưới.

  • Các phương pháp của loại BigInteger song song chặt chẽ với các phương pháp của các loại tích phân khác.

Phức tạp

  • Kiểu System.Numerics.Complex đại diện cho một số phức, tức là một số có một phần số thực và một phần số ảo

  • Nó hỗ trợ một bộ tiêu chuẩn gồm các toán tử số học, so sánh, đẳng thức, chuyển đổi rõ ràng và chuyển đổi ngầm định, cũng như các phương pháp toán học, đại số và lượng giác.

SIMD

  • Không gian tên Numerics bao gồm một tập hợp các loại vectơ hỗ trợ SIMD cho .NET Core.

  • SIMD cho phép một số hoạt động được thực hiện song song ở cấp độ phần cứng, dẫn đến cải thiện hiệu suất rất lớn trong các ứng dụng toán học, khoa học và đồ họa thực hiện tính toán trên vectơ.

  • Các loại vectơ hỗ trợ SIMD trong .NET Core bao gồm:

    • Các loại System.Numerics.Vector2, System.Numerics.Vector3 và System.Numerics.Vector4, là các vectơ 2, 3 và 4 chiều của loại Đơn.

    • Cấu trúc Vectơ <T> cho phép bạn tạo một vectơ có kiểu số nguyên thủy bất kỳ. Các kiểu số nguyên thủy bao gồm tất cả các kiểu số trong không gian tên Hệ thống ngoại trừ Số thập phân.

    • Hai kiểu ma trận, System.Numerics.Matrix3 × 2, đại diện cho ma trận 3 × 2; và System.Numerics.Matrix4 × 4, đại diện cho ma trận 4 × 4.

    • Kiểu System.Numerics.Plane, đại diện cho mặt phẳng ba chiều và kiểu System.Numerics.Quaternion, đại diện cho một vectơ được sử dụng để mã hóa các phép quay vật lý ba chiều.

Trong chương này, chúng tôi sẽ đề cập đến khái niệm thu gom rác, đây là một trong những tính năng quan trọng nhất của nền tảng mã được quản lý .NET. Bộ thu gom rác (GC) quản lý việc cấp phát và giải phóng bộ nhớ. Bộ thu gom rác đóng vai trò như một trình quản lý bộ nhớ tự động.

  • Bạn không cần biết cách cấp phát và giải phóng bộ nhớ hoặc quản lý thời gian tồn tại của các đối tượng sử dụng bộ nhớ đó

  • Việc phân bổ được thực hiện bất cứ khi nào bạn khai báo một đối tượng có từ khóa “mới” hoặc loại giá trị được đóng hộp. Phân bổ thường rất nhanh

  • Khi không có đủ bộ nhớ để cấp phát một đối tượng, GC phải thu thập và xử lý bộ nhớ rác để cung cấp bộ nhớ cho các cấp phát mới.

  • Quá trình này được gọi là garbage collection.

Ưu điểm của việc thu gom rác

Thu gom rác mang lại những lợi ích sau:

  • Bạn không cần phải giải phóng bộ nhớ theo cách thủ công trong khi phát triển ứng dụng của mình.

  • Nó cũng phân bổ các đối tượng trên heap được quản lý một cách hiệu quả.

  • Khi các đối tượng không còn được sử dụng nữa thì nó sẽ lấy lại các đối tượng đó bằng cách xóa bộ nhớ của chúng và giữ bộ nhớ có sẵn cho các lần phân bổ sau này.

  • Các đối tượng được quản lý tự động lấy nội dung rõ ràng để bắt đầu, vì vậy các trình tạo của chúng không cần phải khởi tạo mọi trường dữ liệu.

  • Nó cũng cung cấp sự an toàn cho bộ nhớ bằng cách đảm bảo rằng một đối tượng không thể sử dụng nội dung của đối tượng khác.

Điều kiện thu gom rác

Việc thu gom rác xảy ra khi một trong các điều kiện sau là đúng.

  • Hệ thống có bộ nhớ vật lý thấp.

  • Bộ nhớ được sử dụng bởi các đối tượng được cấp phát trên heap được quản lý vượt qua ngưỡng chấp nhận được. Ngưỡng này liên tục được điều chỉnh khi quá trình chạy.

  • Các GC.Collectphương thức được gọi và trong hầu hết các trường hợp, bạn không cần phải gọi phương thức này, bởi vì bộ thu gom rác chạy liên tục. Phương pháp này chủ yếu được sử dụng cho các tình huống và thử nghiệm duy nhất.

Các thế hệ

.NET Garbage Collector có 3 thế hệ và mỗi thế hệ có heap riêng được sử dụng để lưu trữ các đối tượng được cấp phát. Có một nguyên tắc cơ bản là hầu hết các đối tượng đều tồn tại trong thời gian ngắn hoặc tồn tại lâu dài.

Thế hệ đầu tiên (0)

  • Trong Thế hệ 0, các đối tượng được cấp phát đầu tiên.

  • Trong thế hệ này, các đối tượng thường không tồn tại qua thế hệ đầu tiên, vì chúng không còn được sử dụng (ngoài phạm vi) vào thời điểm thu gom rác tiếp theo xảy ra.

  • Thế hệ 0 nhanh chóng được thu thập vì đống liên kết của nó nhỏ.

Thế hệ thứ hai (1)

  • Trong Thế hệ 1, các đối tượng có không gian cơ hội thứ hai.

  • Các vật thể tồn tại trong thời gian ngắn nhưng tồn tại từ tập hợp thế hệ 0 (thường dựa trên thời gian ngẫu nhiên) sẽ chuyển sang thế hệ 1.

  • Bộ sưu tập thế hệ 1 cũng nhanh chóng vì đống liên kết của nó cũng nhỏ.

  • Hai đống đầu tiên vẫn còn nhỏ vì các đối tượng hoặc được thu thập hoặc được thăng cấp lên đống thế hệ tiếp theo.

Thế hệ thứ ba (2)

  • Trong Thế hệ 2, tất cả các vật thể dài đều được tồn tại và đống của nó có thể phát triển rất lớn.

  • Các đồ vật ở thế hệ này có thể tồn tại lâu dài và không có đống thế hệ sau để phát huy thêm các đồ vật.

  • Garbage Collector có một đống bổ sung cho các đối tượng lớn được gọi là Large Object Heap (LOH).

  • Nó được dành riêng cho các đối tượng có kích thước 85.000 byte trở lên.

  • Các đối tượng lớn không được phân bổ cho các đống thế hệ mà được phân bổ trực tiếp cho LOH

  • Bộ sưu tập thế hệ 2 và LOH có thể mất thời gian đáng kể đối với các chương trình đã chạy trong một thời gian dài hoặc hoạt động trên một lượng lớn dữ liệu.

  • Các chương trình máy chủ lớn được biết là có đống trong 10 GB.

  • GC sử dụng nhiều kỹ thuật khác nhau để giảm lượng thời gian mà nó chặn việc thực thi chương trình.

  • Cách tiếp cận chính là thực hiện càng nhiều công việc thu gom rác càng tốt trên một luồng nền theo cách không can thiệp vào việc thực thi chương trình.

  • GC cũng chỉ ra một số cách để các nhà phát triển tác động đến hành vi của nó, điều này có thể khá hữu ích để cải thiện hiệu suất.

Trong chương này, chúng ta sẽ hiểu quá trình thực thi của .NET Core và so sánh nó với .NET Framework. Quá trình thực thi được quản lý bao gồm các bước sau.

  • Chọn một trình biên dịch
  • Biên dịch mã của bạn sang MSIL
  • Biên dịch MSIL sang mã gốc
  • Đang chạy mã

Chọn một trình biên dịch

  • Nó là một môi trường thực thi đa ngôn ngữ, thời gian chạy hỗ trợ nhiều kiểu dữ liệu và tính năng ngôn ngữ.

  • Để có được những lợi ích do thời gian chạy ngôn ngữ chung cung cấp, bạn phải sử dụng một hoặc nhiều trình biên dịch ngôn ngữ nhắm mục tiêu thời gian chạy.

Biên dịch mã của bạn sang MSIL

  • Biên dịch sẽ dịch mã nguồn của bạn sang Ngôn ngữ Trung cấp của Microsoft (MSIL) và tạo siêu dữ liệu cần thiết.

  • Siêu dữ liệu mô tả các loại trong mã của bạn, bao gồm định nghĩa của từng loại, chữ ký của các thành viên của từng loại, các thành viên mà mã của bạn tham chiếu và dữ liệu khác mà thời gian chạy sử dụng tại thời điểm thực thi.

  • Thời gian chạy định vị và trích xuất siêu dữ liệu từ tệp cũng như từ các thư viện lớp khung (FCL) nếu cần trong quá trình thực thi.

Biên dịch MSIL sang mã gốc

  • Tại thời điểm thực thi, trình biên dịch đúng lúc (JIT) sẽ dịch MSIL thành mã gốc.

  • Trong quá trình biên dịch này, mã phải vượt qua một quy trình xác minh kiểm tra MSIL và siêu dữ liệu để tìm hiểu xem mã có thể được xác định là loại an toàn hay không.

Chạy mã

  • Thời gian chạy ngôn ngữ chung cung cấp cơ sở hạ tầng cho phép thực hiện diễn ra và các dịch vụ có thể được sử dụng trong quá trình thực thi.

  • Trong quá trình thực thi, mã được quản lý nhận được các dịch vụ như thu gom rác, bảo mật, khả năng tương tác với mã không được quản lý, hỗ trợ gỡ lỗi đa ngôn ngữ và hỗ trợ triển khai và lập phiên bản nâng cao.

Quy trình thực thi mã lõi .NET

Bây giờ hãy liên hệ cách mã thực thi với .NET Core so với .NET Framework. Trong .NET Core có nhiều thay thế các thành phần này là một phần của .NET Framework.

  • Trong .NET Core bây giờ chúng ta có một loạt trình biên dịch mới, giống như chúng ta có Roslyn cho C # và VB.

  • Bạn cũng có thể sử dụng trình biên dịch F # 4.1 mới nếu bạn muốn sử dụng F # với .NET Core.

  • Trên thực tế, các công cụ này khác nhau và chúng ta có thể sử dụng Roslyn với .NET Framework nếu chúng ta đang sử dụng C # 6 trở lên, vì trình biên dịch C # chỉ có thể hỗ trợ tối đa C # 5.

  • Trong .NET Core, chúng tôi không có thư viện lớp khung (FCL), vì vậy một bộ thư viện khác được sử dụng và bây giờ chúng tôi có CoreFx.

  • CoreFx là sự hoàn thiện lại các thư viện lớp cho .NET Core.

  • Chúng tôi cũng có một thời gian chạy mới với .NET Core được gọi là CoreCLR và sử dụng Trình biên dịch JIT.

  • Bây giờ câu hỏi đặt ra là tại sao chúng ta lại thực hiện lại tất cả các thành phần này mà chúng ta đã có trong .NET framework.

  • Vì vậy, câu trả lời cũng giống như lý do tại sao Microsoft triển khai .NET Core.

Một sự cân nhắc khác của .NET Core là xây dựng và triển khai ứng dụng theo mô-đun. Thay vì cài đặt toàn bộ .NET Framework, ứng dụng của bạn giờ đây chỉ có thể cài đặt những gì được yêu cầu. Hãy để chúng tôi đến studio trực quan và xem mô-đun.

Đây là ứng dụng .NET Core đơn giản của chúng tôi, trong Solution Explorer. Hãy để chúng tôi mở rộng Tham chiếu và bạn sẽ thấy tham chiếu đến .NETCoreApp

Bên trong .NETCoreApp, bạn sẽ thấy gói tham chiếu đến NuGet; hãy để chúng tôi mở rộng nó.

Bạn sẽ thấy toàn bộ loạt tài liệu tham khảo về Gói NuGet. Nếu bạn đã làm việc trong .NET Framework, thì nhiều không gian tên này sẽ trông quen thuộc, vì bạn đã quen với việc sử dụng trong .NET Framework.

.NET Framework được chia thành nhiều phần khác nhau và được thực hiện lại với CoreFx; những mảnh này được phân phối thêm dưới dạng các gói riêng lẻ.

  • Bây giờ nếu bạn mở rộng NETStandard.Library, bạn sẽ thấy các tham chiếu bổ sung. Bạn thậm chí sẽ nhận thấy System.Console mà chúng tôi đang sử dụng trong ứng dụng này.

  • Giờ đây, bạn không cần phải mang theo mọi thứ bên trong .NET Framework mà chỉ cần mang những gì bạn cần cho ứng dụng của mình.

  • Ngoài ra còn có một số lợi ích khác; ví dụ, các mô-đun này có thể được cập nhật riêng lẻ nếu muốn.

Tính mô-đun dẫn đến lợi ích về hiệu suất và ứng dụng của bạn có thể chạy nhanh hơn, đặc biệt là ứng dụng ASP.NET Core.

Trong chương này, chúng ta sẽ thảo luận về các tệp dự án .NET Core và cách bạn có thể thêm các tệp hiện có trong dự án của mình.

Hãy để chúng tôi hiểu một ví dụ đơn giản trong đó chúng tôi có một số tệp đã được tạo; chúng tôi phải thêm các tệp này vào dự án FirstApp của chúng tôi.

Đây là việc thực hiện Student.cs tập tin

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Threading.Tasks; 
  
namespace FirstApp { 
   public class Student { 
      public int ID { get; set; } 
      public string LastName { get; set; } 
      public string FirstMidName { get; set; } 
      public DateTime EnrollmentDate { get; set; } 
   } 
}

Đây là việc thực hiện Course.cs tập tin.

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Threading.Tasks; 
  
namespace FirstApp { 
   public class Course { 
      public int CourseID { get; set; } 
      public string Title { get; set; } 
      public int Credits { get; set; } 
   } 
}

Bây giờ hãy để chúng tôi lưu ba tệp này vào đĩa của bạn và thư mục nguồn của dự án của bạn.

  • Bây giờ nếu bạn đã quen thuộc với .NET và đây là một ứng dụng bảng điều khiển khung .NET truyền thống, thì điều quan trọng là phải hiểu cách thêm các tệp này vào dự án của bạn trong Visual Studio.

  • Trước tiên, bạn cần kéo các tệp vào trình khám phá giải pháp để sao chép chúng vào thư mục dự án của bạn, vì dự án của bạn cần tham chiếu đến các tệp này.

  • Một trong những lợi ích của .NET Core là cách tiếp cận được thực hiện với tệp dự án (project.json); chúng ta chỉ có thể thả các tệp vào thư mục gốc của dự án và sau đó những tệp này sẽ tự động được đưa vào dự án của chúng ta.

  • Chúng tôi không phải tham chiếu tệp theo cách thủ công như chúng tôi đã làm trước đây cho ứng dụng .NET Framework truyền thống trong Visual Studio.

Bây giờ hãy để chúng tôi mở thư mục gốc của dự án của bạn.

Bây giờ hãy để chúng tôi sao chép tất cả ba tệp vào thư mục gốc của dự án của bạn.

Bây giờ bạn có thể xem tất cả các tệp được sao chép vào thư mục gốc.

Bây giờ chúng ta hãy đi đến Visual Studio; bạn sẽ nhận được hộp thoại sau.

Nhấp chuột Yes to All để tải lại dự án của bạn.

Bây giờ bạn sẽ tự động đưa các tệp vào dự án của mình.

Trong chương này, chúng ta sẽ thảo luận về cách thêm gói vào ứng dụng .NET Core của bạn và cách tìm một gói cụ thể. Chúng ta có thể trực tiếp vào NuGet và thêm gói, nhưng ở đây chúng ta sẽ thấy một số nơi khác.

Bây giờ chúng ta hãy đi đến mã nguồn của .NET Core nằm ở đây - https://github.com/dotnet/corefx

Trong kho CoreFx, hãy mở src thư mục -

Và bạn sẽ thấy toàn bộ danh sách các thư mục tương ứng với các gói khác nhau. Bây giờ chúng ta hãy tìm kiếm Json -

Có một cách khác để tìm gói của bạn, bạn có thể biết nhiều loại khác nhau nếu bạn đã quen thuộc với .NET Framework, nhưng việc lắp ráp các gói trong .NET Core hoàn toàn khác và bạn sẽ không biết gói đó ở đâu.

Nếu bạn biết loại, bạn có thể tìm kiếm để đảo ngược tìm kiếm gói bằng cách sử dụng https://packagesearch.azurewebsites.net/

Tại đây bạn có thể nhập bất kỳ loại gói nào bạn muốn tìm. Sau đó, trang web này sẽ quét NuGet và tìm các gói phù hợp cho bạn.

Bây giờ hãy để chúng tôi tìm kiếm DataContractJson.

Bây giờ bạn sẽ thấy rằng chúng tôi nhận được cùng một gói; hãy để chúng tôi nhấp vào gói.

Bây giờ bạn sẽ thấy trang NuGet; bạn cần xác nhận rằng bạn cần gói này. Bạn có thể thêm điều này vào ứng dụng của mình bằng một số phương pháp.

Hãy để chúng tôi mở tệp project.json.

{ 
   "version": "1.0.0-*", 
   "buildOptions": { 
      "emitEntryPoint": true 
   }, 
   "dependencies": { 
      "Microsoft.NETCore.App": { 
         "type": "platform", 
         "version": "1.0.1" 
      } 
   }, 
   "frameworks": { 
      "netcoreapp1.0": { 
         "imports": "dnxcore50" 
      } 
   } 
}

Đây là định dạng dự án mới và bên trong tệp này, bạn sẽ thấy phần phụ thuộc. Hãy để chúng tôi thêm một phụ thuộc mới như hình dưới đây.

{ 
   "version": "1.0.0-*", 
   "buildOptions": { 
      "emitEntryPoint": true 
   }, 
   "dependencies": { 
      "Microsoft.NETCore.App": { 
         "type": "platform", 
         "version": "1.0.1" 
      }, 
      "System.Runtime.Serialization.Json": "4.0.2" 
   }, 
   "frameworks": { 
      "netcoreapp1.0": { 
         "imports": "dnxcore50" 
      } 
   } 
}

Bây giờ nếu bạn nhìn vào tài liệu tham khảo của mình, bạn sẽ thấy rằng System.Runtime.Serialization.Json gói được thêm vào dự án của bạn.

Một cách khác là vào NuGet Manager và duyệt qua gói bạn muốn thêm.

Trong chương này, chúng ta sẽ thảo luận về cách tạo một ứng dụng UWP bằng .NET Core. UWP còn được gọi là ứng dụng Windows 10 UWP. Ứng dụng này không chạy trên các phiên bản Windows trước mà sẽ chỉ chạy trên phiên bản Windows trong tương lai.

Sau đây là một số ngoại lệ mà UWP sẽ chạy trơn tru.

  • Nếu bạn muốn chạy nó cục bộ, bạn phải có Windows 10, bạn cũng có thể phát triển trên Windows 8 và sau đó bạn sẽ cần chạy nó trên Emulator, nhưng khuyến khích sử dụng Windows 10.

  • Đối với ứng dụng UWP, bạn cũng sẽ cần Windows 10 SDK. Hãy để chúng tôi mở thiết lập Visual Studio 2015 và sau đó sửa đổi Visual Studio.

  • Trên trang tính năng được chọn, cuộn xuống và bạn sẽ thấy Universal Windows App Development Tools, hãy chọn tùy chọn đó như hình bên dưới.

Tại đây, bạn có thể xem các phiên bản SDK khác nhau và cả bản cập nhật mới nhất trên Công cụ, nhấp vào Tiếp theo.

Bây giờ, hãy nhấp vào Install cái nút.

Sau khi cài đặt xong, bạn sẽ cần khởi động lại hệ thống của mình.

Bây giờ chúng ta hãy triển khai UWP bằng cách làm theo các bước sau.

  • Đầu tiên, khởi chạy Visual Studio 2015.

  • Bấm vào menu Tệp và chọn Mới → Dự án; hộp thoại Dự án mới sẽ hiển thị. Bạn có thể thấy các loại mẫu khác nhau trên ngăn bên trái của hộp thoại.

  • Trong ngăn bên trái, bạn có thể thấy chế độ xem dạng cây, bây giờ hãy chọn Mẫu phổ biến từ Mẫu → Visual C # → Windows.

  • Từ ngăn trung tâm, chọn mẫu Ứng dụng trống (Universal Windows).

  • Đặt tên cho dự án bằng cách gõ UWPFirstApp trong trường Tên và bấm OK.

  • Hộp thoại phiên bản đích / phiên bản tối thiểu xuất hiện. Cài đặt mặc định phù hợp với hướng dẫn này, vì vậy hãy chọn OK để tạo dự án.

  • Ở đây, chúng tôi có một dự án duy nhất có thể nhắm mục tiêu tất cả các Thiết bị Windows 10 và bạn sẽ nhận thấy rằng cả .NET Core và UWP đều đơn giản hóa tính năng đa nhắm mục tiêu.

  • Khi một dự án mới mở ra, các tệp của dự án đó được hiển thị ở phía bên phải của ngăn Giải pháp Explorer. Bạn có thể cần chọn tab Giải pháp Explorer thay vì tab Thuộc tính để xem tệp của mình.

  • Mặc dù Ứng dụng trống (Cửa sổ chung) là một mẫu tối thiểu, nó vẫn chứa rất nhiều tệp. Các tệp này cần thiết cho tất cả các ứng dụng UWP sử dụng C #. Mọi dự án mà bạn tạo trong Visual Studio đều chứa các tệp.

  • Để xem ví dụ đang chạy, hãy mở MainPage.XAML và thêm mã sau.

<Page 
   x:Class = "UWPFirstApp.MainPage" 
   xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
   xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml" 
   xmlns:local = "using:UWPFirstApp" 
   xmlns:d = "http://schemas.microsoft.com/expression/blend/2008" 
   xmlns:mc = "http://schemas.openxmlformats.org/markup-compatibility/2006" 
   mc:Ignorable = "d">  
   
   <Grid Background = "{ThemeResource ApplicationPageBackgroundThemeBrush}"> 
      <StackPanel HorizontalAlignment = "Center"> 
         <TextBlock Text = "Hello, world!"  
            Margin = "20" 
            Width = "200" 
            HorizontalAlignment = "Left"/> 
         <TextBlock Text = "Write your name." 
            Margin = "20" 
            Width = "200" 
            HorizontalAlignment = "Left"/> 
         <TextBox x:Name = "txtbox"  
            Width = "280" 
            Margin = "20" 
            HorizontalAlignment = "Left"/> 
         <Button x:Name = "button" Content = "Click Me" 
            Margin = "20" 
            Click = "button_Click"/> 
         <TextBlock x:Name = "txtblock"  
            HorizontalAlignment = "Left" 
            Margin = "20"/> 
      </StackPanel> 
   </Grid> 

</Page>

Dưới đây là sự kiện nhấp vào nút trong C #.

using System; 
using System.Collections.Generic; 
using System.IO; 
using System.Linq; 
using System.Runtime.InteropServices.WindowsRuntime; 

using Windows.Foundation; 
using Windows.Foundation.Collections; 

using Windows.UI.Xaml; 
using Windows.UI.Xaml.Controls; 
using Windows.UI.Xaml.Controls.Primitives; 
using Windows.UI.Xaml.Data; 
using Windows.UI.Xaml.Input; 
using Windows.UI.Xaml.Media; 
using Windows.UI.Xaml.Navigation;  

// The Blank Page item template is documented at 
// http://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x409  

namespace UWPHellowWorld { 
   /// <summary> 
   /// An empty page that can be used on its own or navigated to within a Frame. 
   /// </summary> 
   public sealed partial class MainPage : Page { 
      public MainPage() { 
         this.InitializeComponent(); 
      }  
      private void button_Click(object sender, RoutedEventArgs e) { 
         if (txtbox.Text != "") 
            txtblock.Text = "Hello: " + txtbox.Text; 
         else 
            txtblock.Text = "You have not write your name"; 
      } 
   } 
}

Bây giờ chúng ta hãy chạy đoạn mã trên trên máy cục bộ và bạn sẽ thấy cửa sổ sau. Bây giờ, hãy nhập bất kỳ tên nào vào hộp văn bản và nhấnClick Me cái nút.

Trong chương này, chúng ta sẽ thảo luận về MSBuild là gì và nó hoạt động như thế nào với .NET Core. MSBuild là nền tảng xây dựng cho Microsoft và Visual Studio. Trong ứng dụng UWP nếu bạn mở thư mục dự án, thì bạn sẽ thấy cả tệp project.json và * .csproj.

Nhưng nếu bạn mở ứng dụng .NET Core Console trước đây của chúng tôi, thì bạn sẽ thấy các tệp project.json và * .xproj.

  • Hệ thống xây dựng .NET Core hoặc hệ thống xây dựng project.json không đủ cho nhu cầu của UWP; đây là lý do tại sao UWP vẫn đang sử dụng hệ thống Build * .csproj (MSBuild).

  • Nhưng project.json sẽ di chuyển ra xa khi có liên quan đến hệ thống xây dựng.

  • Bây giờ nếu bạn muốn thêm một vài tệp hiện có vào ứng dụng UWP của mình như chúng tôi đã thêm trong ứng dụng Bảng điều khiển, thì bạn cần thêm các tệp đó vào thư mục dự án. Hơn nữa, bạn cũng sẽ cần đưa dự án của mình vào Solution Explorer.

Bây giờ chúng ta hãy xem xét các tệp sau đây; sao chép các tệp này vào thư mục dự án của bạn.

Chúng ta hãy quay lại Visual Studio và mở Trình khám phá giải pháp.

  • Bây giờ bạn có thể thấy rằng chỉ sao chép tệp là không đủ trong trường hợp ứng dụng UWP, vì trong Giải pháp Explorer, chúng tôi không thể nhìn thấy các tệp đó.

  • Bây giờ chúng ta cũng phải bao gồm các tệp đó bằng cách nhấp vào Show All Files biểu tượng như được đánh dấu trong ảnh chụp màn hình ở trên và bây giờ bạn sẽ thấy tất cả các tệp trong thư mục dự án.

Hai tệp này vẫn chưa được đưa vào dự án của chúng tôi. Để bao gồm các tệp này, hãy chọn các tệp này và nhấp chuột phải vào bất kỳ tệp nào rồi chọnInclude in Project.

Bây giờ các tệp này cũng được bao gồm. Một điều tốt có thể thấy trước là phương pháp project.json giảm tệp cho * .csproj trong phiên bản tương lai của công cụ SKD và cả Visual Studio.

Trong chương này, chúng ta sẽ thảo luận về các tham chiếu giữa ứng dụng Console và ứng dụng UWP của chúng tôi. Nếu bạn nhìn vào Tham chiếu trong Giải pháp Explorer của ứng dụng Bảng điều khiển của mình, bạn sẽ thấy .NETCoreApp như được hiển thị bên dưới.

.NETCoreApp là một khuôn khổ mới nhắm mục tiêu ứng dụng .NET Core. Bây giờ nếu bạn nhìn dưới phần Tham khảo của ứng dụng UWP, nó sẽ trông hơi khác một chút như hình dưới đây.

  • Lý do chính cho điều này là vì ở đây trong UWP, chúng ta có * .csproj, vì vậy chúng ta quay lại kiểu tham chiếu cũ và chúng ta chỉ có thể nhắm mục tiêu một khuôn khổ với loại dự án này.

  • Các tài liệu tham khảo là tương tự mặc dù. Bây giờ bạn có thể thấy rằng trong ứng dụng UWP, tham chiếu Gói Miscrosoft.NETCore.UniversalWindowsPlatform NuGet tương tự như tham chiếu Microsoft.NETCore.App NuGet trong ứng dụng Console.

  • Cả Miscrosoft.NETCore.UniversalWindowsPlatform và Microsoft.NETCore.App đều là siêu gói có nghĩa là chúng bao gồm các gói khác.

  • Trong ứng dụng Console, chúng ta có thể đi sâu vào và xem các gói khác bên trong Microsoft.NETCore.App, nhưng chúng ta không thể làm tương tự như Miscrosoft.NETCore.UniversalWindowsPlatform trong Solution Explorer.

  • Tuy nhiên, chúng ta có thể sử dụng một công cụ khác, NuGet Package Explorer để xem xét điều này. Bây giờ chúng ta hãy mở url này trong trình duyệt -https://npe.codeplex.com/downloads/get/clickOnce/NuGetPackageExplorer.application và bạn sẽ thấy một tiện ích nhỏ đang tải xuống.

  • Sau khi quá trình tải xuống hoàn tất, hãy nhấp đúp vào tệp đó.

  • Nhấp chuột Install để bắt đầu cài đặt trên NuGet Package Explorer.

  • Khi quá trình cài đặt kết thúc, bạn sẽ thấy hộp thoại sau.

  • Bây giờ chúng ta hãy nhấp vào Open a package from online feed Lựa chọn.

  • Theo mặc định, nó sẽ tìm kiếm nguồn cấp dữ liệu nuget.org. Bây giờ chúng ta hãy tìm kiếm Microsoft.NETCore.UniversalWindowsPlatform trong ô tìm kiếm và bạn sẽ thấy 1 kết quả như hình bên dưới.

  • Nhấn vào open liên kết và nó sẽ mở ra các phụ thuộc cấp cao nhất của siêu gói này.

  • Bây giờ chúng ta hãy mở gói meta .NETCore cho ứng dụng .NETCore và gói meta cho ứng dụng UWP cạnh nhau.

  • Bây giờ bạn có thể thấy rằng mỗi gói meta bao gồm các nhóm gói khác nhau.

  • .NET Core là một tập hợp con của các lớp có sẵn trong .NET Framework ít nhất tại thời điểm này, nhưng đang phát triển và sẽ giống như các lớp cơ sở của .NET Framework.

  • UWP dựa trên .NET Core, nó là một tập hợp các API có sẵn để phát triển Windows Store.

Giờ đây, chúng tôi có nhiều API hơn để phát triển do .NET Core.

Các thành phần Windows Runtime là các đối tượng độc lập mà bạn có thể khởi tạo và sử dụng từ bất kỳ ngôn ngữ nào, bao gồm C #, Visual Basic, JavaScript và C ++. Ngoài gói meta .NET Core mà chúng ta đã thấy trong chương trước, ứng dụng UWP cũng có tham chiếu theo mặc định đến Universal Windows SDK.

Universal Windows là tham chiếu đến Windows Runtime và nó đã được tính vào một loạt các hợp đồng API.

Tập hợp các API trong một họ thiết bị được chia thành các phần nhỏ được gọi là hợp đồng API. Bạn có thể tìm thấy danh sách các hợp đồng API khác nhau tại đâyhttps://msdn.microsoft.com/en-us/library/windows/apps/dn706135.aspx

Hầu hết các API bên trong thời gian chạy của windows đều được tính vào một hợp đồng duy nhất. Bây giờ chúng ta hãy tìm kiếm từ khóa Universal trên trang Hợp đồng API.

Bạn có thể thấy các liên kết đến các API khác nhau và bạn cũng có thể thấy dòng Universal lớn đến mức có 12 trang tài liệu.

Bạn cũng có thể tìm kiếm hợp đồng API điện thoại trên trang này.

Bây giờ chúng ta hãy nhấp vào Windows.Phone.PhoneContractvà cuộn xuống; bây giờ bạn sẽ thấy thông tin pin của điện thoại hoặc thiết bị di động.

Nếu bạn muốn thêm thông tin này vào đầu những gì bạn đã có, thì bạn nên thêm các tham chiếu theo cách thủ công. Bây giờ chúng ta hãy đi đến Visual Studio và nhấp chuột phải vào Tham chiếu trong Giải pháp Explorer.

Lựa chọn Add References…

Bây giờ bạn có thể thấy danh mục tham chiếu mới cho Universal Windows; trong danh mục này có Core đề cập đến các hợp đồng API Windows phổ quát cốt lõi

  • Các Tiện ích mở rộng cho phép chúng tôi mở rộng chức năng và bạn sẽ thấy các tham chiếu khác nhau dành cho Di động, Máy tính để bàn và các Tiện ích mở rộng khác.

  • Có các phần mở rộng SKD khác nhau và bạn có thể thêm vào trên cùng để nhận được nhiều API hơn.

  • Bạn cũng có thể xem các phiên bản khác nhau. Vì vậy, hãy đảm bảo rằng bạn tải phiên bản mới nhất để nhận các API cập nhật và sau đó nhấp vào OK.

Bây giờ bạn có thể thấy rằng Windows Mobile Extensions for the UWP được thêm vào làm tài liệu tham khảo.

Thư viện lớp xác định các kiểu và phương thức có thể được gọi từ bất kỳ ứng dụng nào.

  • Thư viện lớp được phát triển bằng .NET Core hỗ trợ Thư viện Chuẩn .NET, cho phép thư viện của bạn được gọi bởi bất kỳ nền tảng .NET nào hỗ trợ phiên bản Thư viện Chuẩn .NET đó.

  • Khi bạn hoàn thành thư viện lớp của mình, bạn có thể quyết định xem bạn muốn phân phối nó như một thành phần của bên thứ ba hay bạn muốn bao gồm nó như một thành phần được đóng gói với một hoặc nhiều ứng dụng.

Hãy để chúng tôi bắt đầu bằng cách thêm một dự án thư viện lớp trong ứng dụng Console của chúng tôi; nhấp chuột phải vàosrc thư mục trong Solution Explorer và chọn Add → New Project…

bên trong Add New Project hộp thoại, chọn nút .NET Core, sau đó chọn mẫu dự án Thư viện lớp (.NET Core).

Trong hộp văn bản Tên, nhập "UtilityLibrary" làm tên của dự án, như hình sau cho thấy.

Bấm OK để tạo dự án thư viện lớp. Khi dự án được tạo, hãy để chúng tôi thêm một lớp mới. Nhấp chuột phải vàoproject trong Giải pháp Explorer và chọn Add → Class...

Chọn lớp trong ngăn giữa và nhập StringLib.cs vào tên và trường, sau đó bấm Add. Sau khi lớp được thêm, sau đó thay thế mã sau trong tệp StringLib.cs.

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Threading.Tasks; 
  
namespace UtilityLibrary { 
   public static class StringLib { 
      public static bool StartsWithUpper(this String str) { 
         if (String.IsNullOrWhiteSpace(str)) 
         return false; 
         Char ch = str[0]; 
         return Char.IsUpper(ch); 
      } 
      public static bool StartsWithLower(this String str) { 
         if (String.IsNullOrWhiteSpace(str)) 
         return false; 
         Char ch = str[0]; 
         return Char.IsLower(ch); 
      } 
      public static bool StartsWithNumber(this String str) { 
         if (String.IsNullOrWhiteSpace(str)) 
         return false;  
         Char ch = str[0]; 
         return Char.IsNumber(ch); 
      } 
   } 
}
  • Thư viện lớp học, UtilityLibrary.StringLib, chứa một số phương thức như, StartsWithUpper, StartsWithLowerStartsWithNumber trả về giá trị Boolean cho biết liệu phiên bản chuỗi hiện tại có bắt đầu bằng chữ hoa, chữ thường và số tương ứng hay không.

  • Trong .NET Core, Char.IsUpper phương thức trả về true nếu một ký tự là chữ hoa, phương thức Char.IsLower trả về true nếu một ký tự là chữ thường, và tương tự phương thức Char.IsNumber trả về true nếu một ký tự là số.

  • Trên thanh menu, chọn Xây dựng, Giải pháp Xây dựng. Dự án sẽ biên dịch mà không có lỗi.

  • Dự án bảng điều khiển .NET Core của chúng tôi không có quyền truy cập vào thư viện lớp của chúng tôi.

  • Bây giờ để sử dụng thư viện lớp này, chúng ta cần thêm tham chiếu của thư viện lớp này trong dự án bảng điều khiển của chúng ta.

Để làm như vậy, hãy mở rộng FirstApp và nhấp chuột phải vào Tham khảo và chọn Add Reference…

Trong hộp thoại Trình quản lý Tham chiếu, chọn UtilityLibrary, dự án thư viện lớp của chúng tôi, sau đó bấm OK.

Bây giờ chúng ta hãy mở tệp Program.cs của dự án bảng điều khiển và thay thế tất cả mã bằng mã sau.

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Threading.Tasks; 
using UtilityLibrary; 

namespace FirstApp { 
   public class Program { 
      public static void Main(string[] args) { 
         int rows = Console.WindowHeight; 
         Console.Clear(); 
         do { 
            if (Console.CursorTop >= rows || Console.CursorTop == 0) { 
               Console.Clear(); 
               Console.WriteLine("\nPress <Enter> only to exit; otherwise, enter a string and press <Enter>:\n"); 
            } 
            string input = Console.ReadLine(); 
            
            if (String.IsNullOrEmpty(input)) break; 
            Console.WriteLine("Input: {0} {1,30}: {2}\n", input, "Begins with uppercase? ", 
            input.StartsWithUpper() ? "Yes" : "No"); 
         } while (true); 
      } 
   } 
}

Bây giờ hãy để chúng tôi chạy ứng dụng của bạn và bạn sẽ thấy kết quả sau.

Để hiểu rõ hơn, hãy để chúng tôi sử dụng các phương thức mở rộng khác của thư viện lớp trong dự án của bạn.

Trong chương này, chúng ta sẽ thảo luận về PCL (Thư viện lớp di động) là gì và tại sao chúng ta cần PCL. Để hiểu khái niệm này, chúng ta hãy mở thư mục dự án thư viện lớp mà chúng ta đã tạo trong chương trước.

Trong thư mục này, bạn có thể thấy rằng ngoài các tệp project.json và CS, chúng ta còn có tệp * .xproj và đó là do Visual Studio thiết lập kiểu dự án .NET Core là * .xproj thay vì * .csproj.

Như đã được Microsoft đề cập, * .xproj sẽ không còn nữa, nhưng nó vẫn ở đây trong công cụ xem trước 2. Như chúng tôi đã trình bày, ứng dụng UWP sử dụng * .csproj.

Bây giờ thực sự không khả thi để lấy * .csproj làm tham chiếu và * .xproj và chức năng đó sẽ không được triển khai vì * .xproj sẽ chuyển ra ngoài.

Vì vậy, thay vào đó, chúng ta cần một thư viện lớp có thể được chia sẻ giữa ứng dụng console và ứng dụng UWP và ở đây là PCL.

PCL là gì

Bây giờ chúng ta hãy hiểu PCL là gì -

  • Dự án Thư viện Lớp Di động cho phép bạn viết và xây dựng các hội đồng được quản lý hoạt động trên nhiều nền tảng .NET Framework.

  • Bạn có thể tạo các lớp có chứa mã mà bạn muốn chia sẻ trên nhiều dự án, chẳng hạn như logic nghiệp vụ được chia sẻ, rồi tham chiếu các lớp đó từ các loại dự án khác nhau.

  • Nó cũng có thể giúp bạn xây dựng các ứng dụng và thư viện đa nền tảng cho các nền tảng của Microsoft một cách nhanh chóng và dễ dàng.

  • Thư viện lớp di động có thể giúp bạn giảm thời gian và chi phí phát triển và kiểm tra mã.

  • Sử dụng loại dự án này để viết và xây dựng các tập hợp .NET Framework di động, sau đó tham chiếu các tập hợp đó từ các ứng dụng nhắm mục tiêu đến nhiều nền tảng như Windows và Windows Phone, v.v.

Bây giờ chúng ta hãy xóa thư viện lớp mà chúng ta đã tạo khỏi Giải pháp Explorer. Đồng thời, xóa nó khỏi thư mục Giải pháp và thêm một mục dự án mới.

Chọn Visual C# → Windows mẫu trong ngăn bên trái và chọn Thư viện lớp (Di động) trong ngăn giữa.

Nhập StringLibrary vào trường tên và nhấp vào OK để tạo dự án này.

Bây giờ chúng ta cần chọn các khung mục tiêu để tham chiếu. Hãy để chúng tôi chọn Windows Universal và ASP.NET Core trong giây lát sau đó chúng tôi sẽ nhắm mục tiêu lại nó. Nhấp chuộtOK.

Bạn có thể thấy rằng nó đã tạo một dự án mới ở định dạng PCF. Bây giờ chúng ta hãy nhấp chuột phải vào dự án StringLibrary trong Solution Explorer và chọn Properties.

Nhấp vào Tiêu chuẩn nền tảng .NET mục tiêu.

Nhấp vào Có; nó bây giờ là cùng một thư viện lớp với một sự khác biệt nhỏ. Sự khác biệt là nó cũng có thể được sử dụng bởi UWP, vì nó chứa tệp * .csproj thay vì * .xproj.

Bây giờ chúng ta hãy thêm một lớp mới; đối với điều này, bạn cần nhấp chuột phải vào dự án trong Solution Explorer và chọnAdd → Class...

Chọn lớp trong ngăn giữa và nhập StringLib.cs trong trường tên và sau đó Nhấp vào Add. Sau khi lớp được thêm, sau đó thay thế mã sau trong tệp StringLib.cs.

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
  
namespace StringLibrary { 
   public static class StringLib { 
      public static bool StartsWithUpper(this String str) { 
         if (String.IsNullOrWhiteSpace(str)) 
            return false; 
         Char ch = str[0]; 
         return Char.IsUpper(ch); 
      } 
      public static bool StartsWithLower(this String str) { 
         if (String.IsNullOrWhiteSpace(str)) 
            return false; 
         Char ch = str[0]; 
         return Char.IsLower(ch); 
      } 
      public static bool StartsWithNumber(this String str) { 
         if (String.IsNullOrWhiteSpace(str)) 
            return false; 
         Char ch = str[0]; 
         return Char.IsNumber(ch); 
      } 
   } 
}

Hãy để chúng tôi xây dựng dự án thư viện lớp di động này và nó sẽ biên dịch mà không bị lỗi. Bây giờ chúng ta cần thêm tham chiếu của thư viện lớp di động này trong dự án bảng điều khiển của chúng ta. Vì vậy, hãy mở rộng FirstApp và nhấp chuột phải vào Tham khảo và chọnAdd Reference…

Trong hộp thoại Trình quản lý tham chiếu, chọn StringLibrary là dự án thư viện lớp di động của chúng tôi, sau đó bấm OK.

Bạn có thể thấy rằng tham chiếu StringLibrary được thêm vào dự án bảng điều khiển và nó cũng có thể được nhìn thấy trong tệp project.json.

Bây giờ bạn có thể chạy lại ứng dụng và bạn sẽ thấy kết quả tương tự.

Bây giờ hãy để chúng tôi sử dụng các phương thức mở rộng khác của thư viện lớp di động trong dự án của bạn. Cùng một thư viện di động cũng sẽ được sử dụng trong ứng dụng UWP của bạn.

Trong chương này, chúng ta sẽ thảo luận về cách thêm tài liệu tham khảo vào thư viện của bạn. Thêm tham chiếu vào thư viện giống như thêm tham chiếu vào các dự án khác của bạn, như dự án bảng điều khiển và dự án UWP.

Bây giờ bạn có thể thấy rằng dự án PCL có một số tham chiếu theo mặc định. Bạn cũng có thể thêm các tài liệu tham khảo khác theo nhu cầu ứng dụng của bạn.

Trong thư viện PCL, bạn cũng có thể thấy tệp project.json.

{ 
   "supports": {}, 
   "dependencies": { 
      "NETStandard.Library": "1.6.0", 
      "Microsoft.NETCore.Portable.Compatibility": "1.0.1" 
   }, 
   "frameworks": { 
      "netstandard1.3": {} 
   } 
}

Một phương pháp thêm tham chiếu vào thư viện của bạn là nhập trực tiếp vào tệp project.json. Như bạn có thể thấy rằng chúng tôi đã thêm một số tham chiếu trong phần phụ thuộc như được hiển thị trong đoạn mã sau.

{ 
   "supports": {}, 
   "dependencies": { 
      "NETStandard.Library": "1.6.0", 
      "Microsoft.NETCore.Portable.Compatibility": "1.0.1", 
      "System.Runtime.Serialization.Json": "4.0.3", 
      "Microsoft.EntityFrameworkCore": "1.1.0" 
   }, 
   "frameworks": { 
      "netstandard1.3": {} 
   } 
}

Bây giờ hãy để chúng tôi lưu tệp này và bạn sẽ thấy rằng các tham chiếu đã được thêm vào thư viện của bạn ngay bây giờ.

Phương pháp khác để thêm tham chiếu vào thư viện của bạn là Trình quản lý gói NuGet. Bây giờ chúng ta hãy nhấp chuột phải vàoStringLibrary (Portable) dự án và chọn Mange NuGet Packages…

Trên tab Duyệt qua, bạn có thể tìm kiếm bất kỳ gói NuGet nào; giả sử chúng tôi muốn thêm gói “System.Runtime.Serialization.Primists”.

Nhấn vào Install , sẽ hiển thị màn hình sau.

Bây giờ, hãy nhấp vào OK cái nút.

Cuối cùng, nhấp vào I Acceptđể bắt đầu cài đặt gói NuGet này. Sau khi cài đặt xong, bạn sẽ thấy gói NuGet “System.Runtime.Serialization.Primists” được thêm vào thư viện của bạn.

Trong chương này, chúng tôi sẽ thảo luận về cách chia sẻ thư viện của bạn như NuGet Packageđể nó có thể được tiêu thụ trong một dự án khác. Tạo gói bắt đầu bằng mã bạn muốn đóng gói và chia sẻ với người khác, thông qua thư viện nuget.org công khai hoặc thư viện riêng trong tổ chức của bạn. Gói này cũng có thể bao gồm các tệp bổ sung nhưreadme được hiển thị khi gói được cài đặt và có thể bao gồm các chuyển đổi đối với các tệp dự án nhất định.

Bây giờ chúng ta hãy xem xét một ví dụ đơn giản trong đó chúng ta sẽ tạo một gói NuGet từ thư viện của chúng ta. Để làm như vậy, hãy mở dấu nhắc lệnh và đi tới thư mục chứa tệp project.json của dự án thư viện của bạn.

Bây giờ chúng ta hãy chạy lệnh sau.

dotnet help

Ở cuối, bạn có thể thấy các lệnh khác nhau như mới, khôi phục và xây dựng, v.v.

Lệnh cuối cùng là pack;điều này sẽ tạo một gói NuGet. Bây giờ chúng ta hãy thực hiện lệnh sau.

dotnet pack

Bây giờ bạn có thể thấy rằng các gói NuGet được tạo ra trong thư mục bin; hãy để chúng tôi mở thư mục bin \ Debug.

Bây giờ câu hỏi là bên trong các gói NuGet là gì, để thấy rằng chúng ta có thể sử dụng NuGet Package Explorer. Bây giờ chúng ta hãy mở Trình khám phá gói NuGet.

Chọn tùy chọn đầu tiên Open a local package.

Chọn StringLibrary.1.0.0.nupkg và bấm vào Open.

Bạn có thể thấy rằng trong phần Nội dung gói chúng ta chỉ có StringLibrary.dll. Trong phần Siêu dữ liệu gói, bạn sẽ thấy một chút thông tin về thư viện này như Id, Phiên bản và tất cả các phụ thuộc.

Bây giờ chúng ta hãy mở StringLibrary.1.0.0.symbols.nupkg.

Trong gói NuGet này, bạn sẽ thấy các tệp nguồn và *.pdbcả tệp. Nếu bạn nhấp đúp vàoStringLib.cs bạn cũng thấy mã nguồn.

Câu hỏi đặt ra ở đây là, làm cách nào có thể định cấu hình siêu dữ liệu như phiên bản, tác giả và mô tả, v.v.

Tệp project.json được sử dụng trên các dự án .NET Core để xác định siêu dữ liệu dự án, thông tin biên dịch và các phần phụ thuộc. Bây giờ chúng ta hãy mở tệp project.json và thêm thông tin bổ sung sau.

{ 
   "authors": [ "Mark Junior" ], 
   "description": "String Library API", 
   "version" : "1.0.1-*", 
   "supports": {}, 
   
   "dependencies": { 
      "Microsoft.EntityFrameworkCore": "1.1.0", 
      "Microsoft.NETCore.Portable.Compatibility": "1.0.1", 
      "NETStandard.Library": "1.6.0", 
      "System.Runtime.Serialization.Json": "4.0.3", 
      "System.Runtime.Serialization.Primitives": "4.3.0" 
   }, 
   "frameworks": { 
      "netstandard1.3": {} 
   } 
}

Bây giờ bạn có thể xem thêm thông tin như tên tác giả, mô tả và phiên bản được thêm ở đây. Hãy để chúng tôi lưu tệp này, xây dựng dự án thư viện, sau đó thực hiện lại lệnh “dotnet pack”.

Bên trong thư mục bin \ Debug, bạn có thể thấy rằng các gói StringLibrary NuGet được sản xuất với phiên bản 1.0.1; hãy để chúng tôi mở nó trong NuGet Package Explorer.

Bạn sẽ thấy siêu dữ liệu được cập nhật. Câu hỏi bây giờ là, làm thế nào chúng ta có thể sử dụng nó trong một gói khác.

Chúng tôi cần bắt đầu bằng cách xuất bản ở đâu đó trong nguồn cấp dữ liệu NuGet và sau đó chúng tôi có thể sử dụng nó trong một dự án khác.

Có hai tùy chọn để xuất bản siêu dữ liệu đã cập nhật -

  • Xuất bản nó lên nuget.org
  • Đẩy siêu dữ liệu vào nguồn cấp dữ liệu NuGet riêng tư

Ở đây chúng tôi sẽ sử dụng nguồn cấp dữ liệu NuGet riêng tư vì nó dễ dàng hơn nhiều so với việc thiết lập một tài khoản trên nuget.org. Để tìm hiểu cách xuất bản gói của bạn lên nuget.org, bạn có thể làm theo tất cả các nguyên tắc được chỉ định tại đâyhttps://docs.microsoft.com/en-us/nuget/create-packages/publish-a-package.

Hãy làm theo các bước sau để đẩy siêu dữ liệu đã cập nhật vào nguồn cấp dữ liệu NuGet riêng tư.

Step 1- Để bắt đầu, chúng ta cần tiện ích dòng lệnh nuget và chúng ta phải cài đặt nó. Bây giờ chúng ta hãy mở Trình quản lý gói NuGet và tìm kiếm nuget.commandline.

Step 2 - Chọn Nuget.Commandline và nhấp vào Install.

Step 3 - Bấm OKđể cài đặt Nuget.Commandline. Bạn cũng có thể cài đặt thủ công bằng cách tải xuống từ Url sauhttps://dist.nuget.org/index.html và sau đó thiết lập biến môi trường.

Step 4 - Sau khi cài đặt xong, chúng ta hãy mở lại dấu nhắc lệnh và đi tới bin\Debug thư mục chứa các gói NuGet và chỉ định lệnh sau:

nuget add StringLibrary.1.0.1.nupkg -Source D:\PrivateNugetPackages

Step 5 - Trong lệnh trên, chúng tôi thêm gói StringLibrary.1.0.1.nupkg vào nguồn cấp dữ liệu riêng tư của chúng tôi và vị trí là D:\PrivateNugetPackages, -Nguồn chỉ định nguồn gói.

Step 6 - Bạn có thể thấy rằng StringLibraryđược cài đặt; cácStringLibrary có thể được thêm vào nguồn cấp dữ liệu riêng tư.

Step 7 - Hãy để chúng tôi đến thư mục đó.

Step 8 - Bên trong stringlibrary thư mục, bạn sẽ thấy một thư mục khác có tên phiên bản và ở đây là 1.0.1.

Gói NuGet nằm ở đây.

Trong chương này, chúng ta sẽ thảo luận về cách sử dụng gói NuGet mà chúng tôi đã tạo và xuất bản lên nguồn cấp dữ liệu NuGet riêng tư. Vì vậy, trước tiên chúng ta sẽ tạo một dự án Xamarin.Forms. Đầu tiên chúng ta cần hiểu Xamarin.Forms là gì.

  • Xamarin.Forms là một khuôn khổ cho phép các nhà phát triển nhanh chóng tạo ra các giao diện người dùng đa dạng.

  • Xamarin.Forms là một bộ công cụ giao diện người dùng được hỗ trợ gốc đa nền tảng, cho phép các nhà phát triển dễ dàng tạo giao diện người dùng có thể được chia sẻ trên Android, iOS, Windows và Windows Phone.

  • Các giao diện người dùng được hiển thị bằng cách sử dụng các điều khiển gốc của nền tảng đích, cho phép các ứng dụng Xamarin.Forms giữ lại giao diện phù hợp cho từng nền tảng.

Để bắt đầu Xamarin.Forms, chúng tôi cần một số tính năng bổ sung trong Visual Studio 2015. Hãy để chúng tôi sửa đổi Visual Studio 2015 của bạn và đảm bảo rằng tùy chọn phát triển di động đa nền tảng sau được chọn.

Sau khi cài đặt xong, hãy để chúng tôi cập nhật Xamarin bằng cách chọn Tools → Options…

Cuộn xuống và mở rộng Xamarin trong ngăn bên trái, sau đó chọn Other. Ở góc trên cùng bên phải của hộp thoại, nhấp vàoCheck Now để xem nếu các bản cập nhật có sẵn.

Bạn có thể thấy rằng các bản cập nhật có sẵn, hãy để chúng tôi nhấp vào Downloadđể bắt đầu tải xuống. Sau khi tải xuống xong, bạn sẽ được thông báo để cài đặt các bản cập nhật.

Bây giờ chúng ta hãy mở lại Visual studio và chọn File → New → Project… tùy chọn menu.

Trong ngăn bên trái, hãy chọn Visual C# → Cross-Platform mẫu và trong ngăn giữa, hãy chọn Blank Xaml App (Xamarin.Forms Portable). Nhập tên vào trường Tên và bấm OK.

Chọn Phiên bản mục tiêu và Phiên bản tối thiểu và nhấp vào OK.

Bạn sẽ thấy một loạt các dự án; ở trên cùng, chúng tôi có thư viện PCL sẽ được chia sẻ giữa tất cả các nền tảng như Android, iOS, UWP, Windows 8.1 và Windows Phone 8.1.

Ở đây, chúng tôi sẽ tập trung vào thư viện PCL và sẽ mang đến một số mã ở đây. Hãy để chúng tôi mở rộng mã.

Trong mẫu Xamarin.Forms này, bạn có thể thấy App.xaml và MainPage.xaml chung, sử dụng khuôn khổ Xamarin.Forms XAML hoạt động trên các nền tảng này.

Chúng tôi cần nhập mã của mình và chúng tôi cũng cần nguồn cấp dữ liệu NuGet riêng mà chúng tôi đã thiết lập trong chương trước.

Bây giờ chúng ta hãy mở Trình quản lý gói NuGet. Nhấp vào bánh xe bên cạnh danh sách thả xuống Nguồn gói.

Chúng tôi cần thêm nguồn cấp dữ liệu cá nhân của mình ở đây, hãy nhấp vào plus (+) button.

Bạn sẽ thấy rằng một hộp kiểm khác được thêm vào Available package sources , hãy để chúng tôi chỉ định tên và đường dẫn nguồn và nhấp vào OK.

Bây giờ chúng ta hãy chuyển đến tab Browse và chọn PrivateSource từ danh sách Package source thả xuống và bạn sẽ thấy gói StringLibrary NuGet. Chọn StringLibrary và nhấp vàoInstall.

Nhấp vào OK và bạn sẽ thấy một lỗi.

Chúng tôi không thể sử dụng thư viện với .NETPortable profile phiên bản 259, chúng tôi sẽ sửa lỗi này trong chương tiếp theo.

Trong chương này, chúng tôi sẽ sửa lỗi chúng tôi gặp phải khi cài đặt gói NuGet từ nguồn cấp dữ liệu riêng tư của chúng tôi trong dự án Xamarin.Forms.

Chúng tôi sẽ hiểu thêm vấn đề một cách ngắn gọn. Để bắt đầu, chúng ta hãy nhấp chuột phải vào thư viện PCL và chọn Thuộc tính.

Trên trang này, bạn sẽ thấy toàn bộ chuỗi các khuôn khổ được nhắm mục tiêu. Từ lỗi, bạn có thể thấy rằng cấu hình .NETPortable 259 không tương thích với StringLibrary 1.0.1 của chúng tôi. Tuy nhiên, nó đang cố gắng lấy tham chiếu từ thư viện .NET Standard 1.1.

Bây giờ chúng ta hãy xem Thư viện chuẩn .NET và xác định nền tảng nào không tương thích với thư viện của chúng ta.

Bạn có thể thấy rằng Windows Phone Silverlight 8 tương thích với .NET Standard 1.0. Nếu bạn mở trang web sau, bạn sẽ thấy rằng Profile259 chỉ có thể hỗ trợ .NET Standard 1.0.

Bây giờ chúng ta hãy bỏ chọn Windows Phone Silverlight 8.

Nhấn vào OK cái nút.

Bây giờ để khắc phục sự cố này, hãy nhấp vào OK và hủy hộp thoại Thay đổi mục tiêu, sau đó mở Bảng điều khiển trình quản lý gói và thực hiện lệnh sau.

PM > Uninstall-Package Xamarin.Forms

Bây giờ chúng ta hãy đi đến Thuộc tính của thư viện PCL. Nhấp vào nút Thay đổi.

Bỏ chọn Windows Phone Silverlight 8 và bấm OK.

Bây giờ bạn có thể thấy rằng Windows Phone Silverlight 8 không còn khả dụng trong khung Targeted nữa. Bạn cũng có thể xem hồ sơ là mục tiêu bây giờ. Để xem điều này, hãy để chúng tôi dỡ bỏ thư viện PCL và chỉnh sửa tệp XamarinApp.csproj.

Bạn có thể thấy TargetFrameworkProfile bây giờ là Profile111.

Nếu bạn mở tài liệu, bạn sẽ thấy rằng Profile111 đang hỗ trợ .NET Standard 1.1.

Bây giờ chúng ta hãy tải lại PCL và mở Trình quản lý gói NuGet và thử cài đặt gói StringLibrary từ nguồn cấp dữ liệu riêng tư.

Từ danh sách thả xuống Hành vi phụ thuộc, hãy chọn Bỏ qua phụ thuộc rồi nhấp vào Install.

Bạn có thể thấy rằng gói StringLibrary hiện đã được cài đặt từ nguồn cấp dữ liệu riêng tư. Nếu bạn mở rộng Tham chiếu của PCL, thì bạn sẽ thấy rằng tham chiếu StringLibrary cũng được thêm vào như hình dưới đây.

Chúng tôi đã gỡ cài đặt Xamarin.Forms cho sự cố Windows Phone Silverlight 8. Xamarin.Forms cần được cài đặt lại. Bạn nên cài đặt cùng một phiên bản.

Sau khi cài đặt hoàn tất, hãy để chúng tôi sử dụng chức năng StringLibrary trong ứng dụng của bạn.

Trong chương này, chúng ta sẽ thảo luận về cách tạo một dự án Thử nghiệm bằng .NET Core. Kiểm thử đơn vị là một quá trình phát triển cho phần mềm có các phần nhỏ nhất có thể kiểm tra được của một ứng dụng, được gọi là các đơn vị. Chúng được xem xét kỹ lưỡng và độc lập để có bất kỳ hoạt động thích hợp nào. Kiểm thử đơn vị có thể được tự động hóa hoặc được thực hiện thủ công.

Bây giờ chúng ta hãy mở hộp thoại Dự án mới và chọn Visual C# → .NET Core bản mẫu.

Trên hộp thoại này, bạn có thể thấy rằng không có mẫu dự án nào để thử nghiệm đơn vị. Để tạo một dự án thử nghiệm đơn vị, chúng ta nên sử dụng tiện ích dòng lệnh. Hãy để chúng tôi đi đến thư mục Giải pháp mà chúng tôi đã tạo; tạo một thư mục thử nghiệm và bên trong thư mục thử nghiệm tạo một thư mục khác và gọi nóStringLibraryTests.

Bây giờ chúng ta hãy sử dụng tiện ích dòng lệnh dotnet để tạo một dự án thử nghiệm mới bằng cách thực hiện lệnh sau:

dotnet new -t xunittest

Bây giờ bạn có thể thấy rằng một dự án C # mới được tạo; hãy để chúng tôi xem xét thư mục bằng cách thực thiv lệnh và bạn sẽ thấy project.jsonTests.cs các tệp như hình dưới đây.

Đây là mã trong tệp project.json.

{ 
   "version": "1.0.0-*", 
   "buildOptions": { 
      "debugType": "portable" 
   }, 
   "dependencies": { 
      "System.Runtime.Serialization.Primitives": "4.1.1", 
      "xunit": "2.1.0", 
      "dotnet-test-xunit": "1.0.0-rc2-192208-24" 
   }, 
   "testRunner": "xunit", 
   "frameworks": { 
      "netcoreapp1.0": { 
         "dependencies": { 
            "Microsoft.NETCore.App": { 
               "type": "platform", 
               "version": "1.0.1" 
            } 
         }, 
         "imports": [ 
            "dotnet5.4", 
            "portable-net451+win8" 
         ] 
      } 
   } 
}

Sau đây là mã trong tệp Test.cs.

using System; 
using Xunit; 
namespace Tests { 
   public class Tests { 
      [Fact] 
      public void Test1() { 
         Assert.True(true); 
      } 
   } 
}

Để tìm nạp các phụ thuộc cần thiết từ NuGet, chúng ta hãy thực thi lệnh sau:

dotnet restore

Chúng tôi có thể chạy thử nghiệm khi các phụ thuộc cần thiết được khôi phục.

Bạn có thể thấy rằng quá trình biên dịch đã thành công; khi bạn đi xuống, bạn có thể thấy một số thông tin về quá trình kiểm tra được thực hiện.

Hiện tại, chúng tôi có 1 bài kiểm tra được thực hiện, 0 lỗi, 0 không thành công, 0 bị bỏ qua và thời gian thực hiện quá trình thực thi cũng được đề cập dưới dạng thông tin.

Trong chương này, chúng ta sẽ thảo luận về cách chạy các bài kiểm tra trong Visual Studio. .NET Core đã được thiết kế chú trọng đến khả năng kiểm tra, do đó việc tạo các bài kiểm tra đơn vị cho các ứng dụng của bạn dễ dàng hơn bao giờ hết. Trong chương này, chúng ta sẽ chạy và thực hiện dự án thử nghiệm của mình trong Visual Studio.

Hãy để chúng tôi mở giải pháp FirstApp trong Visual Studio.

Bạn có thể thấy rằng nó chỉ có hai dự án và bạn sẽ không thể xem dự án thử nghiệm vì chúng tôi chưa thêm dự án đó vào giải pháp của mình.

Hãy để chúng tôi thêm một thư mục trước và gọi nó test.

Nhấp chuột phải vào test thư mục.

Lựa chọn project.json tập tin và nhấp vào Open.

Ảnh chụp màn hình sau đây cho thấy mã trong Tests.cs tệp dưới dạng đầu ra.

Đây là triển khai mặc định và nó chỉ đang kiểm tra rằng True bằng với true. Đó là khung thử nghiệm xUnit và bạn sẽ thấy thuộc tính Fact ghi chú và biểu thị phương pháp thử nghiệm.

using System; 
using Xunit; 
  
namespace Tests { 
   public class Tests { 
      [Fact] 
      public void Test1() { 
         Assert.True(true); 
      } 
   } 
}

Sau đây là việc thực hiện project.json tập tin.

{ 
   "version": "1.0.0-*", 
   "buildOptions": { 
      "debugType": "portable" 
   }, 
   "dependencies": { 
      "System.Runtime.Serialization.Primitives": "4.1.1", 
      "xunit": "2.1.0", 
      "dotnet-test-xunit": "1.0.0-rc2-192208-24" 
   }, 
   "testRunner": "xunit", 
   "frameworks": { 
      "netcoreapp1.0": { 
         "dependencies": { 
            "Microsoft.NETCore.App": { 
               "type": "platform", 
               "version": "1.0.1" 
            }
         }, 
         "imports": [ 
            "dotnet5.4", 
            "portable-net451+win8" 
         ] 
      } 
   } 
}

Trong project.json, phần phụ thuộc quan trọng nhất vào khung thử nghiệm là xunit, mang thuộc tính Fact. Nó mang đến khung thử nghiệm và các API để thử nghiệm với xunit.

Chúng tôi cũng có dotnet-test-xunit, đây là một ứng dụng để xunit có thể hoạt động với .NET Core, cụ thể là với dotnet testtiện ích dòng lệnh. Sau đó, bạn sẽ thấytestRunner mà sẽ chạy xunit và bạn cũng có thể thấy netcoreapp1.0 khuôn khổ.

Bạn sẽ thấy phần phụ thuộc .NETCore.App bên dưới.

Để chạy thử nghiệm trong Visual Studio, hãy mở Trình khám phá thử nghiệm từ Test → Window → Test Explorer tùy chọn menu.

Và bạn có thể thấy rằng Visual Studio tự động phát hiện kiểm tra. Tên của bài kiểm tra bao gồmnamespace.className.TestMethodName. Bây giờ chúng ta hãy nhấp vàoRun All button in Test Explorer.

Đầu tiên, nó sẽ xây dựng mã và chạy thử nghiệm và bạn sẽ thấy tổng thời gian thực hiện thử nghiệm. Chúng ta hãy thay đổi phương pháp kiểm tra để chúng ta có thể nhìn thấy đầu ra khi kiểm tra không thành công.

using System; 
using Xunit; 
  
namespace Tests { 
   public class Tests { 
      [Fact] 
      public void Test1() { 
         Assert.True(false); 
      } 
   } 
}

Hãy để chúng tôi thực hiện kiểm tra lại bằng cách nhấp vào Run All liên kết nút.

Bây giờ bạn có thể thấy test sự thất bại.

Trong chương này, chúng ta sẽ kiểm tra StringLibrary của mình và để làm như vậy, chúng ta cần sắp xếp lại các dự án của mình để có thể tuân theo quy ước mặc định.

Hãy để chúng tôi mở global.json tập tin.

{ 
   "projects": [ "src", "test" ], 
   "sdk": { 
      "version": "1.0.0-preview2-003131" 
   } 
}

Ở đầu tệp này, bạn sẽ thấy cài đặt dự án và nó thiết lập một số thư mục như srctest theo mặc định.

Theo quy ước, chúng ta phải có các dự án trong các thư mục này, đây là quy ước mới và sẽ được sử dụng như một phần của .NET Core.

Trong Giải pháp Explorer, bạn có thể thấy rằng cả dự án bảng điều khiển và dự án thư viện đều nằm trong src trong khi dự án Thử nghiệm ở bên trong test thư mục.

Và cấu trúc dự án trong Solution Explorer không đại diện cho nơi thực tế các dự án tồn tại trên đĩa. Bây giờ chúng ta hãy mở thư mục Giải pháp và bạn sẽ thấy rằngStringLibrary dự án không nằm trong src thư mục.

Bạn có thể thấy rằng cả hai srctest các thư mục ánh xạ đến quy ước được chỉ định trong global.jsontập tin. Tuy nhiên, chúng tôi có một dự án StringLibrary nằm ngoài quy ước. Bây giờ hãy để chúng tôi thêmStringLibrary dự án bên trong src thư mục.

Trong thư mục src, chúng ta có hai dự án và chúng ta cần khắc phục sự cố để có thể sử dụng tất cả các dự án một cách hợp lý. Chúng ta hãy quay lại Visual Studio và nhấp chuột phải vào dự án StringLibrary và chọn tùy chọn Remove. Nó sẽ không xóa nó, nhưng nó sẽ chỉ xóa dự án.

Bây giờ nhấp chuột phải vào thư mục src và chọn Add → Existing Project…

Duyệt đến dự án StringLibrary hiện nằm trong src thư mục, chọn StringLibrary.csproj tập tin và nhấp vào Open.

Bây giờ chúng tôi phải xóa tham chiếu của StringLibrary từ project.json tệp của ứng dụng bảng điều khiển.

{ 
   "version": "1.0.0-*", 
   "buildOptions": { 
      "emitEntryPoint": true 
   }, 
   "dependencies": { 
      "Microsoft.NETCore.App": { 
         "type": "platform", 
         "version": "1.0.1" 
      }, 
      "NuGet.CommandLine": "3.5.0", 
      "System.Runtime.Serialization.Json": "4.0.3" 
   }, 
   "frameworks": { 
      "netcoreapp1.0": { 
         "dependencies": { }, 
         "imports": "dnxcore50" 
      } 
   } 
}

Lưu các thay đổi và sau đó thêm một tham chiếu của StringLibrary một lần nữa trong dự án bảng điều khiển của bạn.

{ 
   "version": "1.0.0-*", 
   "buildOptions": { 
      "emitEntryPoint": true 
   }, 
   "dependencies": { 
      "Microsoft.NETCore.App": { 
         "type": "platform", 
         "version": "1.0.1" 
      }, 
   "NuGet.CommandLine": "3.5.0", 
      "System.Runtime.Serialization.Json": "4.0.3" 
   }, 
   "frameworks": { 
      "netcoreapp1.0": { 
         "dependencies": { 
            "StringLibrary": { 
               "target": "project" 
            } 
         }, 
         "imports": "dnxcore50" 
      } 
   } 
}

Bây giờ mọi thứ sẽ hoạt động trở lại và bạn có thể xây dựng StringLibrary và sau đó FirstApp(dự án giao diện điều khiển) mà không có bất kỳ lỗi nào. Bây giờ chúng ta hãy kiểm tra chức năng StringLibrary bằng xunit. Chúng tôi cần thêm tham chiếu của StringLibrary vào dự án thử nghiệm của mình. Nhấp chuột phải vào tài liệu tham khảo của dự án StringLibraryTests và chọn Thêm tài liệu tham khảo…

Nhấp chuột OK sẽ thêm một tham chiếu về StringLibrarycho dự án thử nghiệm của chúng tôi. Bây giờ hãy để chúng tôi thay thế mã sau trongTests.cs tập tin.

using System; 
using Xunit; 
using StringLibrary; 
  
namespace Tests { 
   public class Tests { 
      [Fact] 
      public void StartsWithUpperCaseTest() { 
         string input = "Mark"; 
         Assert.True(input.StartsWithUpper()); 
      } 
      [Fact] 
      public void StartsWithLowerCaseTest() { 
         string input = "mark"; 
         Assert.True(input.StartsWithLower()); 
      } 
      [Fact] 
      public void StartsWithNumberCaseTest() { 
         string input = "123"; 
         Assert.True(input.StartsWithNumber()); 
      } 
   } 
}

Bạn có thể thấy rằng chúng tôi có ba phương pháp kiểm tra sẽ kiểm tra chức năng của StringLibrary. Hãy để chúng tôi nhấp vàoRun All và bạn sẽ thấy kết quả sau trong Test Explorer.

Bạn cũng có thể chạy các bài kiểm tra từ dòng lệnh. Hãy để chúng tôi mở dấu nhắc lệnh và thực hiệndotnet test chỉ huy.

Trong chương này, chúng ta sẽ thảo luận về Khung khả năng mở rộng được quản lý (MEF). MEF có thể được sử dụng cho khả năng mở rộng plugin của bên thứ ba hoặc nó có thể mang lại lợi ích của kiến ​​trúc giống như plugin được kết hợp lỏng lẻo cho các ứng dụng thông thường.

  • MEF là một thư viện để tạo các ứng dụng nhẹ, có thể mở rộng.

  • Nó cho phép các nhà phát triển ứng dụng khám phá và sử dụng các tiện ích mở rộng mà không cần cấu hình.

  • MEF là một phần không thể thiếu của .NET Framework 4 và có sẵn ở bất cứ nơi nào .NET Framework được sử dụng để cải thiện tính linh hoạt, khả năng bảo trì và khả năng kiểm tra của các ứng dụng lớn.

  • Bạn có thể sử dụng MEF trong các ứng dụng khách của mình, cho dù chúng sử dụng Windows Forms, WPF hoặc bất kỳ công nghệ nào khác hoặc trong các ứng dụng máy chủ sử dụng ASP.NET.

  • MEF đã được chuyển thành Microsoft.Composition .NET Core cũng như một phần.

  • Chỉ có System.Composition được chuyển, và System.ComponentModel.Compositionvẫn chưa có sẵn. Điều này có nghĩa là, chúng ta không có danh mục có thể tải các loại từ các tập hợp trong một thư mục.

Trong chương này, chúng ta sẽ chỉ tìm hiểu cách sử dụng MEF trong ứng dụng .NET Core.

Hãy để chúng tôi hiểu một ví dụ đơn giản trong đó chúng tôi sẽ sử dụng MEF trong ứng dụng bảng điều khiển .NET Core. Bây giờ chúng ta hãy tạo một dự án bảng điều khiển .NET Core mới.

Trong ngăn bên trái, hãy chọn Templates → Visual C# → .NET Core và sau đó trong ngăn giữa, chọn Ứng dụng bảng điều khiển (.NET Core).

Nhập tên của dự án vào trường Tên và bấm OK.

Sau khi dự án được tạo, chúng ta cần thêm tham chiếu của Microsoft.Composition để có thể sử dụng MEF. Để làm như vậy, chúng ta hãy nhấp chuột phải vào dự án trong Solution Explorer vàManage NuGet Packages…

Tìm kiếm Microsoft.Composition và bấm vào Install.

Nhấn vào OK cái nút.

Nhấn vào I Accept cái nút.

Khi quá trình cài đặt hoàn tất, bạn sẽ tìm thấy lỗi trong Tài liệu tham khảo.

Hãy để chúng tôi mở project.json tập tin.

{ 
   "version": "1.0.0-*", 
   "buildOptions": { 
      "emitEntryPoint": true 
   }, 
  
   "dependencies": { 
      "Microsoft.Composition": "1.0.30", 
      "Microsoft.NETCore.App": { 
         "type": "platform", 
         "version": "1.0.1" 
      } 
   }, 
  
   "frameworks": { 
      "netcoreapp1.0": { 
         "imports": "dnxcore50" 
      } 
   } 
}

Bạn có thể thấy rằng Microsoft.Composition phụ thuộc được thêm vào, nhưng vấn đề là gói này không tương thích với dnxcore50. Vì vậy, chúng tôi cần nhậpportablenet45+win8+wp8+wpa81. Hãy để chúng tôi thay thế bạnproject.json tệp với mã sau.

{ 
   "version": "1.0.0-*", 
   "buildOptions": { 
      "emitEntryPoint": true 
   }, 
   "dependencies": { 
      "Microsoft.Composition": "1.0.30", 
      "Microsoft.NETCore.App": { 
         "type": "platform", 
         "version": "1.0.1"
      } 
   }, 
   "frameworks": { 
      "netcoreapp1.0": { 
         "imports": "portable-net45+win8+wp8+wpa81" 
      } 
   } 
}

Lưu tệp này và bạn sẽ thấy rằng lỗi đã được khắc phục.

Nếu bạn mở rộng Tham chiếu, thì bạn sẽ thấy một tham chiếu của Microsoft.Composition.

Đầu tiên, chúng ta cần tạo một giao diện sẽ được xuất và thực hiện giao diện và trang trí lớp với thuộc tính xuất. Bây giờ chúng ta hãy thêm một lớp mới.

Nhập tên cho lớp của bạn vào trường Tên và nhấp vào Add.

Hãy để chúng tôi thêm mã sau vào PrintData.cs tập tin.

using System; 
using System.Collections.Generic; 
using System.Composition; 
using System.Linq; 
using System.Threading.Tasks; 
  
namespace MEFDemo { 
   public interface IPrintData { 
      void Send(string message); 
   } 
   [Export(typeof(IPrintData))] 
   public class PrintData : IPrintData { 
      public void Send(string message) { 
         Console.WriteLine(message); 
      } 
   } 
}

Như đã đề cập ở trên, Danh mục không có sẵn trong không gian tên Microsoft.Composition. Vì vậy, nó sẽ tải tất cả các loại từ Assembly với thuộc tính xuất và đính kèm với thuộc tính nhập như được hiển thị trong phương thức Soạn trong tệp Program.cs.

using System; 
using System.Collections.Generic; 
using System.Composition; 
using System.Composition.Hosting; 
using System.Linq; 
using System.Reflection; 
using System.Threading.Tasks; 
  
namespace MEFDemo { 
   public class Program { 
      public static void Main(string[] args) { 
         Program p = new Program(); 
         p.Run(); 
      } 
      public void Run() { 
         Compose(); 
         PrintData.Send("Hello,this is MEF demo"); 
      } 
      [Import] 
      public IPrintData PrintData { get; set; } 
      
      private void Compose() { 
         var assemblies = new[] { typeof(Program).GetTypeInfo().Assembly }; 
         var configuration = new ContainerConfiguration() 
            .WithAssembly(typeof(Program).GetTypeInfo().Assembly); 
         
         using (var container = configuration.CreateContainer()) { 
            PrintData = container.GetExport<IPrintData>(); 
         } 
      } 
   } 
}

Bây giờ, hãy để chúng tôi chạy ứng dụng của bạn và bạn sẽ thấy rằng nó đang chạy bằng cách khởi tạo PrintData lớp học.

Để tìm hiểu thêm về MEF, chúng ta hãy truy cập vào Url sau https://msdn.microsoft.com/en-us/library/dd460648%28v=vs.110%29.aspx để biết thêm chi tiết.

Trong chương này, chúng ta sẽ hiểu các tính năng sắp tới trong .NET Core. Chúng tôi sẽ bắt đầu với các công cụ dòng lệnh .NET bằng cách mở Url sau trong trình duyệthttps://github.com/dotnet/cli

Để biết thêm về tiến trình, bạn có thể tải xuống phiên bản .NET Core SDK mới nhất bằng cách cuộn xuống và bạn sẽ thấy phần Installer and Binaries.

Bạn có thể xem phiên bản mới nhất của các công cụ xem trước cho các hệ điều hành khác nhau, hãy để chúng tôi chọn Trình cài đặt theo hệ điều hành của bạn.

Chúng tôi đang làm việc trên bản xem trước 1 của .NET Core 2.0.

Bây giờ chúng ta hãy xem xét công cụ hiện tại của chúng ta bằng cách mở dấu nhắc lệnh và thực hiện lệnh sau.

dotnet --info

Bạn sẽ thấy thông tin về phiên bản .NET Command Line Tools hiện được cài đặt trên hệ thống của mình như hình dưới đây.

Bạn có thể thấy rằng hiện tại chúng tôi đã xem trước 2 công cụ. Bây giờ chúng ta hãy chạy lệnh sau để xem vềnew chỉ huy.

dotnet help new

Đối với ngôn ngữ lệnh mới của dự án, bạn có thể chọn như C # và F # và loại dự án, v.v.

Bây giờ chúng ta hãy xem những thay đổi trong phiên bản .NET Core mới nhất. Sau khi tải xuống trình cài đặt, hãy nhấp đúp vào trình cài đặt để cài đặt. Nhấp vào Cài đặt.

Ảnh chụp màn hình sau đây cho thấy quá trình cài đặt.

Nó sẽ bắt đầu quá trình cài đặt. Một cài đặt hoàn tất, Đóng hộp thoại này.

Mở dấu nhắc lệnh và thực hiện lệnh sau.

dotnet --info

Bạn sẽ thấy thông tin về phiên bản .NET Command Line Tools hiện được cài đặt trên hệ thống của mình như hình bên dưới.

Bây giờ bạn có thể thấy rằng chúng ta có công cụ preview1 của .NET Core 2. Bây giờ chúng ta hãy chạy đoạn mã sau trong dấu nhắc lệnh để xem về lệnh mới trong .NET Core 2 preview1.

dotnet help new

Lệnh giúp bạn tải các gói cũng như vào bộ đệm ẩn của gói.

Lệnh mở trang web sau chứa thông tin về lệnh mới trong .NET Core 2 preview1.

Hãy để chúng tôi cuộn xuống, bây giờ bạn có thể thấy rằng chúng tôi có thể tạo ứng dụng .NET Core với nhiều mẫu hơn.

Bây giờ chúng tôi có thể tạo mstest, web, mvcwebapi cũng như sử dụng dòng lệnh.

.NET Core đã quyết định bỏ project.json và quay trở lại MSBuild và * .csproj. Đây là điều đã xảy ra trong công cụ .Net Core 2.0 preview1 vừa được phát hành. Điều này khá đáng thất vọng, bởi vì project.json là một luồng gió mới. Tuy nhiên, nó là điều dễ hiểu và có nhiều lợi thế.

Bây giờ chúng ta hãy thảo luận về những lợi thế mà thay đổi mang lại -

  • Nó sẽ giúp việc chuyển đổi các giải pháp Visual Studio hiện có sang .NET Core trở nên đơn giản.

  • Đó là một thay đổi lớn và nó cũng sẽ cho phép tận dụng khoản đầu tư hiện có vào CI / RM dựa trên MSBuild.

  • Trong quá trình xây dựng trong MSBuild, chúng ta có thể nghĩ đến việc biên dịch gia tăng, giải quyết các phụ thuộc thời gian xây dựng, quản lý cấu hình, v.v.

  • A lot of work is required to ship dotnet cli on time, because it is no longer just about ASP.NET Core, but also console apps, UWP apps, etc.

Following are the changes in MSBuild and *.csproj −

  • Project.json file (*.xproj) will be replaced by MSBuild (*.csproj).

  • Features in project.json will start getting merged back into the the *.csproj.

  • It is not yet clear what they are going to do about the packages list, but it was mentioned they might keep it as json under nuget.json or merge it into the *.csproj.

  • Supposedly that transition should be smooth and potentially automatic if using Visual Studio.

Advantages of MSBuild

  • MSBuild is open source and available on GitHub and is bound to become fully crossplatform.

  • MSBuild will dramatically simplify and trim the structure of the *.csproj.

  • Microsoft is also introducing a new project system which will enable a lot of scenarios without the need for Visual Studio and the details are given on the this Url https://github.com/dotnet/roslyn-project-system/.

  • The goal is that even with the MSBuild setup, working with builds and project will be as seamless in Visual Studio IDE as outside of it.

MSBuild vs project.json

Let us now create a new console project with .NET Core preview2 tooling by executing the following command.

dotnet new -t console

To see all the files created within this project, run the dir command.

You can see that two files are created, Program.cs and project.json file.

Let us now create a console app with .NET Core 2 preview1 tooling by executing the following command.

dotnet new console

To see all the files created within this project, run the dir command. You can see that three files are created, Program.cs, NuGet.config and MSBuild.csproj instead of the project.json file.

Let us now compare project.json and MSBuild.csproj files side by side.

To the left, we have the file in json format while on the right, the file is in XML format. You can see that in the project.json file, inside the dependencies section, there is netcoreapp1.0, while in MSBuild.csproj file, you will see the netcoreapp2.0.

In this chapter, we will discuss how to restore and build your MSBuild (*.csproj) file using the command line utility. To see what commands are available in .NET Core 2.0 preview 1, let us run the following command.

dotnet help

You will see all the commands like new, restore, build, etc.

Following is the default implementation in Program.cs file.

using System;  
namespace MSBuild { 
   class Program { 
      static void Main(string[] args) { 
         Console.WriteLine("Hello World!"); 
      } 
   } 
}

Let us now execute the following command to see the progress.

dotnet build

You will see a lot of errors. These errors need to be rectified.

Let us now run the following command.

dotnet restore

You can see that all the packages are restored. Some new folders and files have also been generated.

To see the directory structure, let us run the following command.

tree /f

Following is the directory structure −

Let us now rebuild the project running the following command again.

dotnet build

Now you project will build successfully without any error(s) and MSBuild.dll is also created.

To see the output, let us run the following command −

dotnet run

You can see the following output on your console.

In this chapter, we will migrate the console application which contains the project.json file build system instead of MSBuild (*.csproj). So, we have an old project which contains the following files.

Now the question is, why do we need migration? This project is created using .NET Core 1.0 preview 2 tooling and now we have installed .NET Core 2.0 preview 1 tooling. Now when you build this application using .NET Core 2.0 command line utility, then you will see the following error.

This is because the project.json build system is no longer available in .NET Core 2.0, so we need migration so that it can work properly. To see the available commands, let us run the following command.

dotnet help

In the commands section, you can see the different commands and you can also see the migrate command which will migrate a project.json based project to a MSBuild based project.

Let us now run the following command.

dotnet migrate

You will see a summary of the migration process and here you can also see that a project is migrated successfully.

Let us now see the directory structure by using the following command.

tree /f

You will now see the *.csproj file along with Program.cs file in the project root directory and project.json is moved to the backup folder.

Let us open the console.csproj file. Now you can restore and build this project using the MSBuild system by running the following command.

dotnet restore

You can now see that all the packages are restored.

You can now build your project with the following command.

dotnet build

You can now see that the project is built successfully using MSBuild and console.dll is also generated in ..\bin\Debug\netcoreapp1.0 folder.

The following screenshot shows the directory structure and files.