Assembly trong C#, thư viện class, NuGet

Assembly trong ₵# (& .NET) là kết quả biên dịch code của mỗi project. Mỗi project đến lượt mình lại có thể tham chiếu (reference) tới các assembly khác để sử dụng các class (& kiểu dữ liệu khác) khái niệm trong assembly đó. Nói cách khác, “chương trình” ₵# (& .NET) chính là một assembly được tạo thành bằng cách “ghép nối” nhiều assembly khác. Assembly của .NET có đuôi exe hoặc dll cũng giống như các file chương trình hoặc thư viện của windows nhưng bản chất của chúng rất độc đáo.

Bài học này sẽ giới thiệu cụ thể về assembly trong ₵#, bao gồm tiến trình xây dựng, sử dụng (tham chiếu) assembly của các bạn & của bên thứ ba. không chỉ thế, trong bài này bạn cũng sẽ làm quen với NuGet – hệ thống làm chủ gói thư viện giành riêng cho các nền móng của Microsoft.

Assembly trong ₵#

Định nghĩa & phân loại assembly trong ₵# .NET

Trong tiến trình học lập trình ₵# căn bản từ đầu đến giờ bạn đã xây dựng hơi nhiều project. Mỗi project này đều thuộc loại Console App – loại vận dụng tự chạy độc lập với giao diện dòng lệnh. Trong ₵# (& .NET) chương trình vận dụng này được gọi là một assembly.

Ngoài Console App, ₵# cũng có thể tạo thành nhiều loại project khác, tương ứng với các loại vận dụng riêng. Kết quả biên dịch mọi project của ₵# compiler đều được gọi chung là assembly.

Cái tên assembly cũng dùng chung cho toàn bộ kết quả dịch các project viết bằng từ ngữ .NET khác như VB.NET, ₵++ CLI.

Các assembly này cốt yếu chia làm hai loại: một loại có thể chạy độc lập như một chương trình bình bình; một loại chỉ có thể được sử dụng bởi project khác.

Chẳng hạn, assembly của Console App mà bạn thân thuộc, của Windows Forms, của Windows Presentation Foundation đều thuộc loại đầu tiên. Đặc trưng của loại assembly đó là có mặt cách thức static void Main() với vai trò entry point – điểm bắt đầu của hoạt động của chương trình. Loại assembly này thường có đuôi exe, giống như các file chạy thông thường của windows.

Loại assembly thứ hai không chứa static void Main, do vậy chẳng thể tự mình chạy như một chương trình độc lập. Loại assembly này được gọi là class library (thư viện lớp) hoặc code library. Loại assembly này được sử dụng bởi các project khác hoặc chương trình khác, chẳng hạn, chạy trong IIS – chương trình máy chủ website của Microsoft, hoặc chạy trong hệ thống (ở dạng system service). Loại assembly này có đuôi là dll (dynamic backlinks library), cũng giống như các file thư viện hệ thống của windows.

Trên thực tiễn, loại assembly thứ hai rất đông đảo. Chúng tạo thành cả hệ thống thư viện class của .NET. Từ đầu đến giờ thực ra bạn đã liên tục sử dụng mscorlib.dll – một assembly thuộc loại này.

₵# compiler auto tham chiếu tới thư viện mscorlib.dll trong toàn bộ các project. Thư viện này chứa toàn bộ các khái niệm kiểu nền tảng của .NET.

Về bản chất, exe hay dll assembly không có gì độc đáo nhau. Nghĩa là tuyệt đối có thể coi exe assembly là một class library & tham chiếu tới nó từ project khác.

Assembly chứa mã CIL (Common Intermediate Language) – mã của
từ ngữ trung gian không lệ thuộc platform. Ở công đoạn thực thi, mã CIL được
JIT (Just-in-time) compiler dịch tiếp thành mã đặc thù của platform để thực thi.
Nói một cách dễ dàng, assembly cũng có thể coi là file mã nguồn viết bằng ngôn
ngữ CIL. Bạn không cần quan tâm đến từ ngữ này làm gì. ₵# compiler luôn giúp
bạn dịch mã nguồn chương trình về CIL rồi.

Vai trò & đặc tính của assembly trong .NET

Đầu tiên, assembly trong .NET cho phép tái sử dụng code độc lập với từ ngữ lập trình.

Để dễ hiểu, hãy hình dung thế này. Nếu bạn xây dựng một thư
viện class qua một project trên ₵#. Bạn có thể sử dụng thư viện này trong
project viết bằng bất kỳ từ ngữ .NET nào, như VB.NET, ₣#. Ở chiều trái lại
cũng đúng. Một thư viện class viết trên VB.NET (cũng là một assembly) có thể dễ
dàng sử dụng trong một project ₵#.

Không những đơn thuần là sử dụng class trong thư viện, bạn
cũng có thể mở rộng class trong thư viện (dù là viết bằng từ ngữ .NET khác)
thông qua chính sách kế thừa.

Một interface được xây dựng trong thư viện viết bằng ₣# cũng
có thể được thực thi bởi class viết trong ₵#.

Thứ hai, assembly tạo thêm một mức độ làm chủ nữa so với các kiểu dữ liệu, bên cạnh namespace. Hãy hình dung bạn xây dựng hai thư viện class riêng, giả sử đặt tên là MyCars.dll & YourCars.dll. Trong cả hai thư viện này có cùng namespace CarLibrary. Trong mỗi namespace này đều xây dựng class SportsCar. So với .NET, đây là hai kiểu dữ liệu khác nhau.

Thứ ba, cần phân biệt giữa private & shared assembly. Assembly trong .NET có thể được triển khai theo kiểu “private” hoặc “shared”. Private assembly nằm trong cùng thư mục (hoặc thư mục con) của chương trình sử dụng nó & chỉ giành riêng cho chương trình đó. Shared assembly được triển khai để nhiều chương trình bằng máy tính có thể dùng sử dụng. Shared assembly nằm trong một thư mục đặc biệt có cái tên là Global Assembly Cache (GAC).

Thứ tư, mỗi assembly là một nhà cung cấp độc lập có số phiên bản riêng. Một assembly được gán một số phiên bản bao gồm 4 phần theo mẫu <majorvàgt;.<minorvàgt;.<buildvàgt;.<revisionvàgt;. Nếu bạn không tự mình phân phối số phiên bản, assembly sẽ được auto gán số phiên bản là 1.0.0.0.

Xem Thêm  Sử dụng CSS :: trước và :: sau cho các lớp phủ hình ảnh đơn giản, sâu sắc - css sau hình nền

Giá trị phiên bản cho phép nhiều phiên bản shared của cùng một assembly cùng tồn tại trên cùng một máy. CLR bảo đảm sẽ load phiên bản thích hợp của assembly cho client.

Mỗi assembly có một file cấu hình dạng xml riêng. File cấu hình này cho phép chỉ định địa điểm đặt assembly, phiên bản sẽ được tải cho client, ?.?..

Sử dụng assembly có sẵn

Việc sử dụng assembly trong ₵# project rất dễ. Bạn có thể đơn giản tạo thành & sử dụng assembly của riêng mình cũng như sử dụng các assembly sẵn có (của .NET hoặc của bên thứ ba). Trong phần này tất cả chúng ta cân nhắc cách dùng assembly có sẵn. Phần kế tiếp sẽ chỉ dẫn cách tự tạo & sử dụng assembly của riêng mình.

Sử dụng assembly của .NET

Để minh họa, tất cả chúng ta sẽ sử dụng class MessageBox của thư viện System.Windows.Forms. Class này cho phép chương trình xuất hiện các hộp thoại nhắc nhở.

Thực hiện theo các bước dưới đây để tham chiếu project tới thư viện System.Windows.Forms:

Viết vài dòng code vào Main():

using System;

namespace StandardAssembly
{
    class Program
    {
        static void Main(string[] args)
        {
            while (true)
            {
                Console.Write("Enter a message: ");
                var message = Console.ReadLine();

                System.Windows.Forms.MessageBox.Show(message,
                    "Message",
                    System.Windows.Forms.MessageBoxButtons.OK,
                    System.Windows.Forms.MessageBoxIcon.Information);
            }
        }
    }
}

Dịch & chạy thử chương trình để xem kết quả. Bạn nhập một dòng nhắc nhở, chương trình sẽ xuất hiện hộp thoại với nhắc nhở đó.

Như bạn đã thấy, việc tham chiếu & sử dụng thư viện class chuẩn của .NET rất dễ.

Chú ý rằng, nếu bạn mở thư mục bin/Debug (nơi chứa assembly chương trình), bạn sẽ không thấy file thư viện đâu. System.Windows.Forms.dll là một shared assembly của .NET Framework. Nó sẽ không được sao chép vào thư mục của chương trình.

Sử dụng assembly của bên thứ ba

Đây là tình huống bạn tải từ nơi nào đó về một file thư viện dll & bạn mong muốn dùng nó trong project của mình. Để thực hiện chẳng hạn này, bạn có thể sử dụng một bộ thư viện mà Tự học ICT đã chỉ dẫn làm trong loạt bài xây dựng thư viện trợ giúp vận dụng console.

Bạn tải file thư viện từ đường backlinks này.

Chú ý: tránh sử dụng các thư viện không rõ nguồn gốc.

Thực hiện lại các thao tác như trên. Bên cạnh đó ở bước 2 click vào nút Browse để tìm tới file dll vừa tải về.

Viết vài dòng code sử dụng thư viện vừa rồi:

using System;

namespace CustomAssembly
{
    class Program
    {
        static void Main(string[] args)
        {
            var app = new Framework.Application
            {
                Title = "Hello C# Assembly",
                Prompt = "# ",
                Config = Config
            };

            app.Run();
        }

        static void Config()
        {
            Framework.Router.Instance.Register(
                route: "hello",
                action: (ρ) => Framework.ViewHelper.WriteLine($"Hello, {p["name"]}. Have a good day!", ConsoleColor.Green)
                );

            Framework.Router.Instance.Register(
                route: "hi",
                action: (ρ) => Framework.ViewHelper.WriteLine($"Hi, {p["name"]}. Nice to meet you!", ConsoleColor.Yellow)
                );
        }
    }
}

Chạy chương trình & nhập thử hai lệnh hello ? name = Trump & hi ? name = Obama để xem kết quả.

Nếu mở thư mục bin/Debug (nơi chứa exe assembly chương trình) bạn sẽ thấy file thư viện Framework.dll cùng nằm bước này:

Framework.dll là một private assembly, chỉ được sử dụng bởi vận dụng.

Đây là bộ thư viện rất hữu dụng nếu bạn phải viết các chương trình thực sự với giao diện console. Tự học ICT đã chỉ dẫn cụ thể cách xây dựng thư viện này trong chuỗi bài học thư viện cho vận dụng console.

Tự tạo & sử dụng class library trong solution

Để tinh thông hơn về assembly trong ₵# & .NET, hãy cũng tự xây dựng một class library, triển khai & sử dụng nó trong project. Class library này sẽ đo đạc lại một số class mà bạn đã xây dựng trong các bài học trước. Cho nên, bạn không cần tự gõ lại code mà chỉ cần sao chép code đã có sẵn.

Class Library project

Việc tạo thành các class library của riêng mình cũng rất dễ. Bạn hãy thêm một project mới vào solution. Bên cạnh đó, ở cửa sổ Add New Project bạn chọn Class Library (.NET Framework) thay cho Console App (.NET Framework) mà bạn thân thuộc:

Sự độc đáo đối với Console App project là chẳng hề có Program hay Main. Bạn có một file code Class1.cs tạo sẵn:

Xóa bỏ file code này, thêm file code mới Complex.cs giành riêng cho lớp Complex mà bạn đã từng xây dựng trong bài học về struct. Tất cả chúng ta căn chỉnh Complex một tí để nó thành class.

 using System;

namespace MathLibrary
{
    /// <summaryvàgt;
    /// Class trình diễn số phức
    /// </summaryvàgt;
    public class Complex
    {
        public double Real; // trường thực
        public double Imaginary; // trường ảo

        public Complex()
        {

        }

        /// <summaryvàgt;
        /// Hàm tạo
        /// </summaryvàgt;
        /// <param name="r">phần thựcvàlt;/paramvàgt;
        public Complex(double r)
        {
            Real = r;
            Imaginary = 0;
        }

        /// <summaryvàgt;
        /// Hàm tạo
        /// </summaryvàgt;
        /// <param name="r">phần thựcvàlt;/paramvàgt;
        /// <param name="i">phần ảovàlt;/paramvàgt;
        public Complex(double r, double ι)
        {
            Real = r;
            Imaginary = ι;
        }

        /// <summaryvàgt;
        /// Chuyển chuỗi hợp lệ thành giá trị của Real & Imaginery
        /// </summaryvàgt;
        /// <param name="value"></paramvàgt;
        public void Parse(string value)
        {
            var temp = value.Trim();
            if (temp.EndsWith("i") || temp.EndsWith("I"))
            {
                temp = temp.TrimEnd('ι', 'Ι');
                var tokens = temp.Split(new[] { '+', '-' }, 2);
                Real = double.Parse(tokens[0]);
                Imaginary = double.Parse(tokens[1]);
            }
            else
            {
                Real = double.Parse(temp);
            }
        }

        /// <summaryvàgt;
        /// Chuyển chuỗi hợp lệ thành giá trị của Real & Imaginery
        /// </summaryvàgt;
        /// <param name="value"></paramvàgt;
        /// <returnsvàgt;</returnsvàgt;
        public static Complex FromString(string value)
        {
            var temp = new Complex();
            temp.Parse(value);
            return temp;
        }

        /// <summaryvàgt;
        /// Đặc điểm, trả về module của số phức
        /// </summaryvàgt;
        public double Modulus => Math.Sqrt(Real * Real + Imaginary * Imaginary);

        /// <summaryvàgt;
        /// Ghi đè phép toán +
        /// </summaryvàgt;
        /// <param name="a"></paramvàgt;
        /// <param name="b"></paramvàgt;
        /// <returnsvàgt;</returnsvàgt;
        public static Complex operator +(Complex α, Complex ɓ)
        {
            return new Complex(α.Real + ɓ.Real, α.Imaginary + ɓ.Imaginary);
        }

        /// <summaryvàgt;
        /// Ghi đè phép toán -
        /// </summaryvàgt;
        /// <param name="a"></paramvàgt;
        /// <param name="b"></paramvàgt;
        /// <returnsvàgt;</returnsvàgt;
        public static Complex operator -(Complex α, Complex ɓ)
        {
            return new Complex(α.Real - ɓ.Real, α.Imaginary - ɓ.Imaginary);
        }

        /// <summaryvàgt;
        /// Ghi đè cách thức ToString() của object
        /// </summaryvàgt;
        /// <returnsvàgt;</returnsvàgt;
        public override string ToString()
        {
            if (Imaginary == 0)
            {
                return Real.ToString();
            }

            return $"{Real} {(Imaginary > 0 ? '+' : '-')} {Math.Abs(Imaginary)}i";
        }
    }
}

Thực ra trong class library có thể chứa bất kỳ khái niệm kiểu nào, không nhất thiết phải là class. Bạn có thể dễ chịu khái niệm các kiểu khác như enum, struct, interface, delegate. Class library không có gì độc đáo với Console App mà bạn đã thân thuộc.

Xem Thêm  MySQL GROUP BY - nhóm mysql ở đâu

Để mắt rằng bạn phải khai báo class Complex với keyword public

public class Complex
{ 
    ...

Nếu thiếu keyword này, lớp Complex chỉ có thể sử dụng trong nội bộ project MathLibrary. Khi đó, Complex sẽ vô nghĩa gì với project sử dụng thư viện này vì không ai chứng kiến nó.

Sau thời điểm viết code, hãy bấm tổ hợp Ctrl + Shift + Ɓ để build solution. Còn nếu không build solution, bạn sẽ chưa thể sử dụng thư viện này trong project khác.

Tham chiếu project tới thư viện vừa tạo

Nếu tham chiếu thành công, assembly MathLibrary sẽ hiện ra trong mục lục References của ClientProject.

Giờ bạn có thể sử dụng Complex trong client code như trước đó:

using System;
using MathLibrary;

namespace ClientProject
{
    using static Console;    
    class Program
    {
        static void Main(string[] args)
        {
            Title = "Complex number";

            // khai báo & khởi tạo biến α thuộc kiểu Complex
            var α = new Complex(1, 2);
            WriteLine($"a = {a}");
            // sử dụng đặc điểm Modulus của Complex
            WriteLine($"|a| = {a.Modulus}");

            // gọi cách thức Parse
            α.Parse("10-2i");
            WriteLine($"a = {a}");

            // gọi cách thức tĩnh FromString
            var ɓ = Complex.FromString("5 + 3i");
            WriteLine($"b = {b}");

            // thực hiện phép cộng trên số phức
            WriteLine($"a + b = { a + b}");

            ReadKey();
        }
    }
}

Chú ý, ở khối using đầu file bạn có lệnh using MathLibrary; để sử dụng tên ngắn gọn của lớp Complex, thay vì phải sử dụng tên đầy đủ MathLibrary.Complex. MathLibrary là namespace nơi khai báo lớp Complex.

Lợi thế rất lớn của việc sử dụng class library trong solution nằm ở chỗ, nếu bạn biến đổi code của thư viện, sau thời điểm build solution, client project sẽ tự update bản dịch mới của thư viện. Tức là, client project sẽ luôn sử dụng bản dịch update của thư viện mà không cần tham chiếu lại.

Nếu bạn bỏ keyword public trước khai báo class Complex (chuyển nó thành internal), client code sẽ không chứng kiến class này nữa. Nghĩa là bạn chẳng thể sử dụng Complex khi nó được khai báo là internal.

Một số chú ý khi tạo thư viện class

Class Library project không có gì độc đáo với Console App project. Bên cạnh đó, vì bạn xây dựng thư viện thường là để người khác sử dụng, có một số điều nên chú ý.

Default namespace

Khi tạo project mới, Visual studio sẽ sử dụng tên project làm default namespace. Mỗi khi bạn tạo file code mới, default namespace sẽ được sử dụng ngay cho file đó.

Bạn có thể biến đổi giá trị này trong mục Properties của project như sau:

Xml documentation

Bạn đã biết documentation phản hồi & vai trò của nó so với Visual studio Intellisense. Nếu bạn tạo class library & sử dụng thẳng trong project, documentation phản hồi sẽ được Intellisense tiếp tục sử dụng trong client project. Nghĩa là khi trỏ vào tên class/method/interface ?.?, phản hồi này sẽ hiển thị để bạn hiểu này là cái gì.

Nếu bạn dịch & phân phối thư viện dll này cho người khác sử dụng, documentation phản hồi sẽ không hiện ra trong client project. Để client project bất kỳ có thể sử dụng documentation phản hồi bạn đã viết trong thư viện, bạn mở node Properties như trên nhưng chuyển sang mục Build, click chọn mục “XML documentation file“.

Khi build project, Visual studio sẽ auto mang các phản hồi này vào một file xml. Nếu bạn phân phối file xml này cùng với file thư viện dll, client project sẽ tiếp tục hiển thị các documentation phản hồi.

Khi sử dụng thư viện Framework.dll ở phần trên bạn có thể đã để mắt thấy điều này.

Nested namespace

Khi có sll các kiểu (class, struct, enum, interface, delegate) khái niệm trong class library, chúng ta nên cân nhắc phân tách chúng theo tính năng bổ phận. Điều này giúp dễ dàng hóa việc sử dụng chúng trong client project.

Bạn đã biết quy ước phân tách code thành file trong project. Bên cạnh đó, điều này chỉ tác động tới việc viết & làm chủ code của chính project đó. So với người tiêu dùng thư viện (đã biên dịch thành dll), họ chỉ chứng kiến cách làm chủ class theo namespace.

Do đó, chúng ta nên phân tách class (& các khái niệm kiểu khác) vào các nested namespace nếu thiết yếu.

Lấy chẳng hạn thư viện MathLibrary bên trên. Bạn đã khái niệm kiểu Complex. Nếu bạn tiếp tục khái niệm các kiểu dữ liệu cầu kỳ khác như Vector, Matrix. Bạn cũng song song khái niệm class Math để thực hiện các hàm tính toán. Như thế, các class này có thể chia làm hai nhóm: nhóm kiểu dữ liệu & nhóm thực hiện tính năng.

Để người tiêu dùng thư viện đơn giản hiểu & tìm đến class theo nhu cầu, bạn có thể bố trí namespace của các class Complex, Vector, Matrix thành:

namespace MathLibrary.Types
{    
    public class Complex
    {
namespace MathLibrary.Types
{
    public class Vector
    {

Khi này, trong client project bạn có thể sử dụng các class này theo tên đầy đủ là MathLibrary.Types.Complex, MathLibrary.Types.Vector, ?.?.. Hoặc sử dụng tên ngắn gọn nếu bổ sung using MathLibrary.Types; ở khối using.

Xem Thêm  Thay đổi phông chữ CSS - cách thay đổi phông chữ trong css

Sử dụng thư viện từ NuGet, NuGet Packages Manager

Giới thiệu về NuGet

NuGet là hệ thống làm chủ gói software mã mở Free kiến trúc cho các nền móng lớn mạnh vận dụng của Microsoft từ 2010. Hiện tại NuGet đã biến thành một hệ sinh thái lớn chứa nhiều loại dụng cụ & dịch vụ. Trên NuGet hiện có khoảng hơn 130 nghìn gói thư viện với 1,4 triệu phiên bản & 1,3 tỉ lượt download.

Lập trình viên .NET có thể đơn giản tìm, sử dụng & phân phối các gói thư viện thông qua NuGet.

Trước đó NuGet thường được thiết lập như một vận dụng mở rộng của Visual Studio. NuGet được thiết lập mặc định trên Visual Studio từ phiên bản 2012.

Tất cả chúng ta có thể sử dụng theo 1 vài cách khác nhau:

  1. sử dụng vận dụng giao diện đồ họa NuGet Package Manager,
  2. sử dụng giao diện dòng lệnh Package Manager Console,
  3. thiết lập auto với các file mã cốt chuyện.

Cách dễ dàng nhất để tìm & thiết lập các gói thư viện từ NuGet là sử dụng tiện ích mở rộng NuGet Package Manager.

Seting thư viện NewtonSoft.Json với NuGet Manager

Để minh họa việc tải & thiết lập gói thư viện từ NuGet, tất cả chúng ta sẽ cùng cài NewtonSoft.Json.

NewtonSoft.Json là bộ thư viện này cho phép chuyển hóa một object của ₵# thành một chuỗi ký tự định dạng theo quy ước của JSON (JavaScript Object Notation) cũng như chuyển hóa ngược chuỗi JSON về object của ₵#. Đây là một trong những bộ thư viện có lượt download lớn nhất trên NuGet.

Tiến trình chuyển hóa này có cái tên là serialization (từ object về JSON) & deserialization (từ JSON về object). Bạn sẽ học về serialization, bao gồm xml, json & binary serialization trong một bài khác.

Bạn có thể sử dụng bộ thư viện này để tự lưu thông tin cấu hình cho vận dụng, hoặc lưu trữ dữ liệu dễ dàng thay cho sử dụng một CSDL.

Bước 1. Mở giao diện làm chủ các gói thư viện NuGet

Click phải vào References, chọn Manage NuGet Packages (xem hình dưới đây).

Mở giao diện Manage NuGet PackagesMở giao diện Manage NuGet Packages

Bước 2. Chọn cài gói thư viện

Trong ô tìm kiếm ở tab Browse gõ newtonsoft, chọn gói NewtonSoft.Json & ấn Install.

Giao diện Manage NuGet Packages Giao diện Manage NuGet Packages

Sau lệnh này, Visual Studio sẽ tải gói thư viện này về & thiết lập lên project tương ứng (trong trường hợp đó là BookMan.ConsoleApp).

Kiểm soát kết quả

Sau thời điểm thiết lập thành công bộ thư viện này, trong mục lục References sẽ hiện ra thêm một mục “NewtonSoft.Json”. Trong kết cấu dự án sẽ hiện ra thêm file “packages.config” chứa thông tin về các gói thư viện được thiết lập đặt thêm.

Sau thời điểm dịch chương trình (Ctrl + Shift + Ɓ) thành công, trong thư mục BinDebug của dự án sẽ hiện ra file thư việc NewtonSoft.Json.dll.

Khi triển khai vận dụng cho người dùng cuối, file thư viện này cũng cần phải đi cùng file chương trình.

File thư viện Newtonsoft.json.dll sau khi cài đặtFile thư viện Newtonsoft.json.dll sau thời điểm thiết lập

Seting gói NuGet sử dụng trang web phối hợp Package Manager Console

Cách thứ hai là sử dụng dịch vụ tìm kiếm trên trang web https://www.nuget.org/packages để tìm gói thư viện thích hợp. Sau đó sao chép dòng lệnh paste vào Package Manager Console.

Giao diện tìm kiếm thư viện Newtonsoft.Json trên websiteGiao diện tìm kiếm thư viện Newtonsoft.Json trên trang web

Còn nếu không chứng kiến tab Package Manager Console, chọn Lượt xem => Other Windows => Package Manager Console, hoặc Tools => NuGet Package Manager => Package Manager Console.

Giao diện dòng lệnh của Package Manager ConsoleGiao diện dòng lệnh của Package Manager Console

Khi sử dụng Package Manager Console chú ý chọn tham số “Default project” là project mình cần thiết lập gói thư viện.

Một số chú ý khi sử dụng các gói thư viện từ NuGet

Khi sử dụng các gói thư viện trên NuGet cần chú ý cân nhắc kỹ sự lệ thuộc (dependency) của gói thư viện cần dùng với các gói thư viện khác.

Nguyên nhân là nhiều thư viện trên NuGet sử dụng lẫn nhau, cũng như được xây dựng cho các phiên bản .NET khác nhau.

Khi thiết lập một thư viện mà nó lệ thuộc vào các thư viện khác, các thư viện kia cũng cần phải được thiết lập theo & phải thiết lập phiên bản mà thư viện chính có thể sử dụng được.

Nếu các gói thư viện có phiên bản mới, NuGet cũng cho phép update phiên bản đang thiết lập trong dự án lên phiên bản mới. Bên cạnh đó, cũng giống với khi thiết lập, phải chú ý sự lệ thuộc giữa các thư viện trước khi quyết định cải tiến. 

Tổng kết

Bài học rất dài này đã phân phối cho bạn đầy đủ tri thức thiết yếu để hiểu & làm việc với assembly trong .NET. Các bài viết của bài không khó ngoài ra bạn cần để mắt khi sử dụng.

Một khuyến cáo là đừng ngần ngại tách project lớn thành các project nhỏ với class library assembly trong đó. Nó sẽ giúp bạn làm chủ code tốt hơn. Đặc biệt, nếu bạn có các class cần tái sử dụng qua nhiều project, hãy đặt nó vào một class library.

+ Nếu bạn thấy site hữu dụng, trước khi rời đi hãy trợ giúp site bằng một hành động nhỏ để site có thể lớn mạnh & phục vụ bạn tốt hơn.
+ Nếu bạn thấy nội dung hữu dụng, hãy giúp chia sẻ tới mọi người.
+ Nếu có khúc mắc hoặc cần thỏa thuận thêm, mời bạn viết trong phần bàn bạc dưới cùng của trang.
Cảm ơn bạn!

Viết một bình luận