在 node 里有一个 npx 命令可以直接执行 npm package,dotnet 也在 .NET 10 中引入了一个 dnx 的命令,我们可以通过 dnx 来执行一个 dotnet tool 而无需将其安装为 global tool 或者 local tool,这样可以执行 dotnet tool 同时不在 global tool 或者 local tool 中引入额外的工具
我们可以通过 dnx --help
来查看使用说明,从使用帮助可以看出 dnx
等同于 dotnet dnx
,而它又是 dotnet tool exec
/dotnet tool execute
的一个别名
`dxn --help`
`dotnet tool execute`
例如我们执行 dotnet-execute 输出一个 guid,可以执行 dnx dotnet-execute "Guid.NewGuid()"
`dnx dotnet-execute "Guid.NewGuid()"`
第一次执行会看 nuget package 缓存中是否已经下载,需要下载的时候会弹出提示,不想看到提示的话可以执行的时候指定 -y
默认会使用 nuget.org 上最新的稳定版本,也可以指定具体的版本或者使用 --prerelease
目前的版本里有点问题,即使之前已经下载安装了还是会重新下载,后面版本会修复
在 .NET 10 最新版本的 SDK 的根目录下,可以看到有一个可执行的 dnx
文件,在 Windows 下是 dnx.cmd
`dotnet-sdk windows folder`
`dotnet-sdk linux folder`
dnx.cmd
内容如下:
@echo off
"%~dp0dotnet.exe" dnx %*
`dnx.cmd`
dnx
linux 内容如下:
#!/bin/sh
"$(dirname "$0")/dotnet" dnx "$@"
大概就是从执行当前同目录的命令 dotnet dnx
,可以参考 PR:https://github.com/dotnet/sdk/pull/49461/files
而 dotnet dnx
默认是隐藏的一个命令,所以在 dotnet --help
的时候是没有 dnx
相关的介绍的,而 dotnet dnx
又相当于是 dotnet tool execute
的一个别名,两者的实现是一致的
dnx 的出现一方面是为了简化 dotnet tool execuete 的使用,同时方便基于标准输入输出的 MCP tool,这样比较方便地运行 MCP Server
同时在 CI 时使用这一命令可以避免影响整体环境