.Net Tools 创建指南
示例可见 CowSay
.Net Tool 需要使用 .net 6.0 及以上的版本
#创建 .Net Tool 项目
使用 dotnet new
命令创建一个新的 .Net Tool:
1 | dotnet new console -n <ToolName> -f <Framework> |
如下例创建了一个名为 Cowsay
的 .Net Tool,使用的是 .Net 8.0 的版本:
1 | dotnet new console -n CowSay -f net8.0 |
当执行上述命令后,会在当前目录下创建一个名为 CowSay
的文件夹,其中包含了一个名为 Program.cs
的文件,该文件中包含了一个 Main
方法,该方法是 .Net Tool 的入口方法。
以及包含有一个 CowSay.csproj
的文件,该文件是 .Net Tool 的项目文件。
1 | <Project Sdk="Microsoft.NET.Sdk"> |
可以看到其中约定的 TargetFramework
是 8.0
。
#修改代码
将 Program.cs
中的代码修改为如下内容:
1 | using System.Reflection; |
其中 Main
方法中的代码是用来处理命令行参数的,如果没有参数,会打印一系列提示信息。如果有参数,则会将参数组合成一个 string
并作为输出的小牛的 ASCII 图案中的一部分内容。
#运行 Tool
此时在 CowSay
文件夹下执行 dotnet run
命令,会输出如下内容,因为此时并没有带上任何参数,所以会输出一系列提示信息:
1 | ❯ dotnet run |
如果运行 dotnet run Hello World
命令,则会输出如下内容。因为此时带上了参数,所以程序会将参数赋予给小牛并输出:
1 | ❯ dotnet run Hello World |
#打包 Tool
在运行打包前,先修改 Cowsay.csproj
文件,在 <PropertyGroup>
标签中添加如下内容:
1 | <PackAsTool>true</PackAsTool> |
其中:
<PackAsTool>
标签是用来指定是否将项目打包为一个 .Net Tool<ToolCommandName>
标签是用来指定打包后的 .Net Tool 的名称,该名称会用于后续在 CLI 中调用<PackageOutputPath>
标签是用来指定打包后的 .Net Tool 的输出路径。<Version>
标签标识打包后的 .Net Tool 的版本
此时在 CowSay
文件夹下执行 pack
命令进行打包:
1 | dotnet pack |
此时在 CowSay
文件夹下创建一个名为 nupkg
的文件夹,其中包含的就是可安装的 tool 文件:
1 | ├───nupkg |
#安装 Global Tool
当 打包 Tool 生成了一个可安装的 .Net Tool 后,就可以使用 dotnet tool install
命令来安装该 Tool:
1 | dotnet tool install --global --add-source <sourcePath> <toolName> --version <version> |
理论上 --version
不是必须的,但是在某些 .net 版本下,如 .net 8.0.203
中,不加上这个参数会出现错误,详见:Issue
如下在安装后,即可直接运行 coway
命令:
1 | ❯ dotnet tool install --global --add-source .\nupkg CowSay --version 1.0.1 |
后续如果想要删除该 tool,则可以运行 uninstall
命令:
1 | dotnet tool uninstall -g <toolName> |
#安装路径控制
在 Windows 下默认 Tool 安装的路径是:
1 | C:\users\$env:username\.dotnet\tools |
在安装时,可以加上 --tool-path
参数来指定安装路径:
1 | dotnet tool install --tool-path <path> --add-source <sourcePath> <toolName> --version <version> |
对于指定路径的 tool,当卸载时也需要加上 --tool-path
参数来指定卸载路径:
1 | dotnet tool uninstall --tool-path <path> <toolName> |
#更新 Tool
如果修改了 Tool 并重新进行了 打包 Tool 操作,可以使用 update
进行 tool 的更新:
1 | dotnet tool update --global --add-source <sourcePath> <toolName> |
如我们将 CowSay
的版本更新为 1.0.2
后,并再次允许 dotnet pack
,此时在 .nuget
目录下会生成一个新的 nupkg
文件夹,其中包含了新的 CowSay
的版本:
1 | ├── nupkg |
此时可运行 dotnet tool update
进行更新:
1 | dotnet tool update --global --add-source .\nupkg CowSay --version 1.0.2 |
至此,一个最简单的 .Net Tool 就创建完成了。但如果要将其发布 上,还需要进行一些额外的操作。
#增加 License
在 XML 中添加以下的内容即可将 License 文件打包到 NuGet 包中:
1 | <PropertyGroup> |
#增加 README
1 | <PropertyGroup> |
#Reference
Tutorial: Create a .NET tool - .NET CLI | Microsoft Learn
(4) How to create your own .NET CLI tools to make your life easier - YouTube