概要
これの発想としてはNode.jsのnpxと同じです。dotnet toolをインストール、実行、破棄までを1つのコマンドで実行してくれます。CI/CDではかなり重宝されそうです。
# dotnetsayというdotnet toolをnugetからインストールして実行する # --yesを付与すると質問を自動でyesで回答する $ dnx dotnetsay --yes "Hello, World!" Hello, World! __________________ \ \ .... ....' .... .......... .............'..'.. ................'..'..... .......'..........'..'..'.... ........'..........'..'..'..... .'....'..'..........'..'.......'. .'..................'... ...... . ......'......... ..... . ...... .. . .. ...... .... . ....... ...... ....... ............ ................ ...................... ........................'................ ......................'..'...... ....... .........................'..'..... ....... ........ ..'.............'..'.... .......... ..'..'... ...............'....... .......... ...'...... ...... .......... ...... ....... ........... ....... ........ ...... ....... '...'.'. '.'.'.' .... ....... .....'.. ..'..... .. .......... ..'........ ............ .............. ............. '.............. ...........'.. .'.'............ ............... .'.'............. .............'.. ..'..'........... ............... .'.............. ......... .............. .....
ちなみにdotnetsay自体は有名な実験用のdotnet toolですので安心してください。ただ引数に渡した値を返してくれるだけのdotnet toolです。
NuGet Gallery | dotnetsay 2.1.7
また最近のAIブームに関連して、mcp serverを活用する際にも効果を発揮してくれると思ってます。例えば以下のMCP Serverの作成方法を紹介する記事でもばっちりNuGet + dnxを活用していますね。
t.co
使い方
現状はpreview版の.NET 10を入れる必要があります。具体的には.NET 10 SDK Preview 6以上です。
ちなみに現在(2025/8/18)ではpreview7まで出ています。
細かいオプション
$ dotnet tool exec --help Description: ツールを永続的にインストールすることなく、ソースから実行します。 使用法: dotnet tool execute <packageId> [<commandArguments>...] [options] 引数: <PACKAGE_ID> 'Newtonsoft.Json' のようなパッケージ識別子の形式のパッケージ参照、または 'Newtonsoft.Json@13.0.3' のような '@' で区切られたパッケージ識別子とバージョンです。 <commandArguments> ツールに渡された引数 オプション: --version <バージョン> インストールするツール パッケージのバージョン。 -y, --yes [はい] を使用して、すべての確認プロンプトを受け入れます。 [default: False] --interactive コマンドを停止して、ユーザーの入力またはアクション (認証の完了など) を待機できるようにします。 [default: True] --allow-roll-forward 対象となるランタイムがインストールされていない場合、.NET ツールが新しいバージョンの .NET ランタイムにロールフォワードできるようにします。 [default: False] --prerelease プレリリース パッケージが含まれます。 [default: False] --configfile <ファイル> 使用する NuGet 構成ファイル。 --source <ソース> インストール中に使用するすべての NuGet パッケージ ソースをこれらに置き換えます。 --add-source <ADDSOURCE> インストール中に使用する他の NuGet パッケージ ソースを追加します。 --disable-parallel 複数のプロジェクトを並行して復元できないようにします。 [default: False] --ignore-failed-sources パッケージ ソース エラーを警告として処理します。 [default: False] --no-http-cache パッケージと HTTP 要求はキャッシュしません。 [default: False] -v, --verbosity <LEVEL> MSBuild の詳細レベルを設定します。使用可能な値: q[uiet]、m[inimal]、n[ormal]、d[etailed]、diag[nostic]。 [default: normal] -?, -h, --help コマンド ラインのヘルプを表示します。
dnxでも同様のオプションを活用できます。
$ dnx --help Description: ツールを永続的にインストールすることなく、ソースから実行します。 使用法: dotnet dnx <packageId> [<commandArguments>...] [options] 引数: <PACKAGE_ID> 'Newtonsoft.Json' のようなパッケージ識別子の形式のパッケージ参照、または 'Newtonsoft.Json@13.0.3' のような '@' で区切られたパッケージ識別子とバージョンです。 <commandArguments> ツールに渡された引数 オプション: --version <バージョン> インストールするツール パッケージのバージョン。 -y, --yes [はい] を使用して、すべての確認プロンプトを受け入れます。 [default: False] --interactive コマンドを停止して、ユーザーの入力またはアクション (認証の完了など) を待機できるようにします。 [default: True] --allow-roll-forward 対象となるランタイムがインストールされていない場合、.NET ツールが新しいバージョンの .NET ランタイムにロールフォワードできるようにします。 [default: False] --prerelease プレリリース パッケージが含まれます。 [default: False] --configfile <ファイル> 使用する NuGet 構成ファイル。 --source <ソース> インストール中に使用するすべての NuGet パッケージ ソースをこれらに置き換えます。 --add-source <ADDSOURCE> インストール中に使用する他の NuGet パッケージ ソースを追加します。 --disable-parallel 複数のプロジェクトを並行して復元できないようにします。 [default: False] --ignore-failed-sources パッケージ ソース エラーを警告として処理します。 [default: False] --no-http-cache パッケージと HTTP 要求はキャッシュしません。 [default: False] -v, --verbosity <LEVEL> MSBuild の詳細レベルを設定します。使用可能な値: q[uiet]、m[inimal]、n[ormal]、d[etailed]、diag[nostic]。 [default: normal] -?, -h, --help コマンド ラインのヘルプを表示します。
一応細かい補足ですが、厳密には--no-http-cacheというオプションを設定しなければキャッシュが保存されるので、2回目以降は素早く動作させることは可能になります。