Tạo một dotnet tool cơ bản

dotnet tool thực chất là một ứng dụng console. Khi gọi lệnh, nó xử lý các đối số truyền vào và thực thi logic bên trong. Để biết thêm về cách sử dụng lệnh dotnet tool, tham khảo tài liệu chính thức.
Bài viết này sẽ hướng dẫn xây dựng một tool đơn giản thông qua demo.

1. Tạo dự án Console App

Sử dụng .NET 5, tạo mới một ứng dụng console. Trong file .csproj, thêm các cấu hình cần thiết:
<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net5.0</TargetFramework>
    <Version>0.0.1</Version>

    <PackAsTool>true</PackAsTool>
    <ToolCommandName>csrebot</ToolCommandName>
    <PackageOutputPath>./nupkg</PackageOutputPath>
  </PropertyGroup>
</Project>

2. Phát triển logic ứng dụng

Viết code xử lý các đối số. Thay vì dùng Dictionary, chúng ta có thể dùng cấu trúc switch để rõ ràng hơn. Ví dụ:
using System;
using System.Reflection;

namespace CSRebot
{
    class Program
    {
        static void Main(string[] args)
        {
            if (args.Length == 0)
            {
                ShowDefaultInfo();
                return;
            }
            ProcessArguments(args);
        }

        static void ShowDefaultInfo()
        {
            var version = Assembly.GetEntryAssembly()
                .GetCustomAttribute<AssemblyInformationalVersionAttribute>()
                ?.InformationalVersion ?? "unknown";
            Console.WriteLine($@"
CSRebot v{version}
----------------------------------------------
Description:
    Hỗ trợ sử dụng C# tốt hơn.

Usage:
    csrebot [options]
----------------------------------------------
");
        }

        static void ProcessArguments(string[] args)
        {
            switch (args[0])
            {
                case "-h":
                    ShowHelp();
                    break;
                case "-h=today":
                    ShowToday();
                    break;
                default:
                    Console.WriteLine($"Không hỗ trợ đối số: {args[0]}");
                    break;
            }
        }

        static void ShowHelp()
        {
            var version = Assembly.GetEntryAssembly()
                .GetCustomAttribute<AssemblyInformationalVersionAttribute>()
                ?.InformationalVersion ?? "unknown";
            Console.WriteLine($@"
Version {version}

Usage: csrebot [options] [command] [command-options] [arguments]
");
        }

        static void ShowToday()
        {
            var dayOfWeek = (int)DateTime.Now.DayOfWeek;
            string dayName;
            switch (dayOfWeek)
            {
                case 0: dayName = "Chủ Nhật"; break;
                case 1: dayName = "Thứ Hai"; break;
                case 2: dayName = "Thứ Ba"; break;
                case 3: dayName = "Thứ Tư"; break;
                case 4: dayName = "Thứ Năm"; break;
                case 5: dayName = "Thứ Sáu"; break;
                case 6: dayName = "Thứ Bảy"; break;
                default: dayName = "Không xác định"; break;
            }

            // Đổi màu chữ cho cuối tuần
            if (dayOfWeek == 0 || dayOfWeek == 6)
            {
                Console.ForegroundColor = dayOfWeek == 0 ? ConsoleColor.Red : ConsoleColor.Green;
            }

            Console.WriteLine($"Hôm nay là {DateTime.Now:dd/MM/yyyy}, {dayName}");
            Console.ResetColor();
        }
    }
}

3. Đóng gói và cài đặt

Tại thư mục dự án, chạy lệnh đóng gói (pack). Sau đó cài đặt tool từ nguồn địa phương:
dotnet pack
dotnet tool install -g --add-source ./nupkg CSRebot
Kết quả sẽ hiện:
You can invoke the tool using the following command: csrebot
Tool 'csrebot' (version '0.0.1') was successfully installed.

4. Kiểm tra tool

Gõ lệnh:
csrebot -h=today
Kết quả ví dụ:
Hôm nay là 07/02/2021, Chủ Nhật

5. Gỡ bỏ khi cập nhật

Nếu bạn cập nhật code, cần gỡ tool cũ và cài lại phiên bản mới:
dotnet tool uninstall -g CSRebot
Lưu ý: Trong quá trình phát triển, không nên đẩy gói lên NuGet.org nếu chưa hoàn thiện, để tránh ảnh hưởng đến chất lượng thư viện công cộng.

Thẻ: dotnet tool C# nuget console application .NET 5

Đăng vào ngày 11 tháng 10 lúc 15:02