1. 程式人生 > 其它 >一個簡單的dotnet tool

一個簡單的dotnet tool

技術標籤:javagoredispython程式語言

dotnet tool對應的工具,本質上是一個控制檯應用,在呼叫這個應用時,會根據傳入的引數,執行應用內部的邏輯。


關於dotnet tool命令使用,參照https://docs.microsoft.com/zh-cn/dotnet/core/tools/dotnet-tool-install


下面來通過一個簡單的demo來看一下tool的開發過程。

首先建立一個.net5的控制檯應用程式,並在專案檔案中新增PackAsTool,ToolCommandName,PackageOutputPath三個節點配置:

<ProjectSdk="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>


控制檯專案正常開發,下面程式碼只是做了個數據展示的功能:

using System;
using System.Collections.Generic;
using System.Reflection;


namespace CSRebot
{
    class Program
{
        static void Main(string[] args)
        {
            if (args.Length == 0)
{
                _infoDic["--info"]();
                return;
            }
            else
            {
                Run(args);
            }
}
        static Dictionary<string, Action> _infoDic = new Dictionary<string, Action> {
            { "--info", ()=>Console.WriteLine( @$"
CSRebot v{Assembly.GetEntryAssembly().GetCustomAttribute<AssemblyInformationalVersionAttribute>().InformationalVersion.ToString()}
----------------------------------------------
Description:
    為更好的使用C#提供幫助。


Usage:
csrebot[options]
----------------------------------------------
")
    },
            {"-h",()=>Console.WriteLine(@$"
Version {Assembly.GetEntryAssembly().GetCustomAttribute<AssemblyInformationalVersionAttribute>().InformationalVersion.ToString()}


使用情況: csrebot [options] [command] [command-options] [arguments]


")
            },
            {
    "-h=today",()=>{
        switch((int)DateTime.Now.DayOfWeek)
        {
            case 0:
                Console.ForegroundColor=ConsoleColor.Red;
                break;
            case 6:
                Console.ForegroundColor=ConsoleColor.Green;
                break;   
        }
        Console.WriteLine(@$"今天是{DateTime.Now.ToString("yyyy年MM月dd日")},{(DayOfChineseWeek)(int)DateTime.Now.DayOfWeek}");
Console.ResetColor();
            }
        }
};
        static void Run(string[] args)
        {
            if (_infoDic.ContainsKey(args[0]))
            {
                _infoDic[args[0]]();
            }
        }
}
    public enum DayOfChineseWeek
{
        星期日 = 0,
        星期一 = 1,
        星期二 = 2,
        星期三 = 3,
        星期四 = 4,
        星期五 = 5,
        星期六 = 6
    }
}

完成後,選中專案並打包,然後進入專案所有的資料夾執行工具安裝命令

dotnet tool install -g --add-source ./nupkg CSRebot

命令列會返回

可使用以下命令呼叫工具: csrebot

已成功安裝工具“csrebot”(版本“0.0.1”)。

說明csrebot這個工具安裝成功,現在可以用這個工具執行一下,看看輸出結果了

csrebot -h=today

今天是2021年02月07日,星期日

這裡是開發階段,我們沒有把這個工具釋出出來,也不建把非成品釋出到nuget.org上,避免拉低nuget.org質量

如果工具程式碼更新了,要重新解除安裝這個工具,重灌安裝才可能,這個很好理解,就是刪除原來的應用,重新引用新應用,功能就會得到更新。

dotnet tool uninstall -g CSRebot