37. 编写包管理工具
37.1 关于包管理工具
使用过 NodeJs
的朋友一定对 npm
命令不会陌生,可以通过 npm
安装项目需要的包或环境需要的工具,在 .NET Core 2.1+
之后,微软也推出了新的特性,Global/Local Tools
,该特性功能也正是受到 npm
启发下诞生的。
不同的是,npm
中的包采用的是 JavaScript
编写并发布到 https://www.npmjs.com/ 平台,而 dotnet tools
采用 C#
编写并发布到 https://www.nuget.org/
平台供安装使用。
37.1.1 dotnet tools
包管理好处
- 跨平台,支持
Linux/Mac/Windows
平台供安装使用 - 完整的
C#
生态支持 - 为所欲为~~~(拥有操作系统的权限)
37.2 了解包命令语法
通常包命令语法都遵循以下规则:
<-|--|/>argument-name<=|:| >["|']value['|"] [--] [operand] ... [operand]
在这里,Furion
将简单介绍命令常用的知识:
工具符
:通常指的是你工具的唯一名称,也就是关键字,而且总是在最开头编写,如:dotnet
,npm
,node
短参数
:短参数指的是单个字符
的字符串,我们通常使用-
一个横杆指定参数及值,如:-v
或-v 0.0.1
长参数
:长参数指的是一个或多个单词连接的字符串,该参数通常和短参数
同时存在,通常使用--
指定参数及值,如:--version
或--version 0.0.1
操作符
:字符串中与参数值格式不匹配的任何文本都被视为操作数,任何出现在双连字符--
之后且未包含在单引号或双引号中且两侧有空格的文本都被视为操作数,无论它是否与参数值格式匹配,通常用于归类/分类作用。
37.2.1 短参数例子
-a foo
短参数 | 参数值 |
---|---|
a | foo |
-ab
短参数 | 参数值 |
---|---|
a | |
b |
-abc bar
短参数 | 参数值 |
---|---|
a | |
b | |
c | bar |
37.2.2 长参数例子
--foo bar
长参数 | 参数值 |
---|---|
foo | bar |
--foo --bar
长参数 | 参数值 |
---|---|
foo | |
bar |
--foo bar --hello world
长参数 | 参数值 |
---|---|
foo | bar |
hello | world |
37.2.3 混合参数例子
-abc foo --hello world /new="slashes are ok too"
短/长参数 | 参数值 |
---|---|
a | |
b | |
c | foo |
hello | world |
new | slashes are ok too |
37.2.4 多个值参数
--list 1 --list 2 --list 3
长参数 | 参数值 |
---|---|
list | 1,2,3 |
37.2.5 操作符
-a foo bar "hello world" -b -- -explicit operand
短参数 | 参数值 |
---|---|
a | foo |
b |
操作符 |
---|
bar |
"hello world" |
-explicit |
operand |
了解更多关于包命令语法的官方知识:https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html
37.3 编写第一个包
dotnet tools
工具实际上是一个 控制台
应用程序,不同的是 .csproj
项目文件需要添加特定配置。下面将给大家编写一个 HelloTools
包管理工具。