dotnet-tool-install(1)
π dotnet-tool-install π
okay bestie, welcome to the manual page for dotnet-tool-install, straight outta the .NET Documentation. this is the one that puts .NET tools on your machine. let's go π«Ά
This article applies to: βοΈ .NET 6 SDK and later versions
πΈ NAME πΈ
dotnet-tool-install β installs the specified .NET tool on your machine. that's it, that's the job π
β¨ SYNOPSIS β¨
dotnet tool install <PACKAGE_NAME> -g|--global
[--allow-downgrade] [--allow-roll-forward] [-a|--arch <ARCHITECTURE>]
[--add-source <SOURCE>] [--configfile <FILE>] [--disable-parallel]
[--framework <FRAMEWORK>] [--ignore-failed-sources] [--interactive]
[--no-cache] [--prerelease]
[--tool-manifest <PATH>] [-v|--verbosity <LEVEL>]
[--version <VERSION_NUMBER>]
dotnet tool install <PACKAGE_NAME> --tool-path <PATH>
[--allow-downgrade] [--allow-roll-forward] [-a|--arch <ARCHITECTURE>]
[--add-source <SOURCE>] [--configfile <FILE>] [--disable-parallel]
[--framework <FRAMEWORK>] [--ignore-failed-sources] [--interactive]
[--no-cache] [--prerelease]
[--tool-manifest <PATH>] [-v|--verbosity <LEVEL>]
[--version <VERSION_NUMBER>]
dotnet tool install <PACKAGE_NAME> [--local]
[--allow-downgrade] [--allow-roll-forward] [-a|--arch <ARCHITECTURE>]
[--add-source <SOURCE>] [--configfile <FILE>]
[--create-manifest-if-needed] [--disable-parallel]
[--framework <FRAMEWORK>] [--ignore-failed-sources] [--interactive]
[--no-cache] [--prerelease]
[--tool-manifest <PATH>] [-v|--verbosity <LEVEL>]
[--version <VERSION_NUMBER>]
dotnet tool install -h|--help
π¦ DESCRIPTION π¦
the dotnet tool install command is literally your way to install .NET tools on your machine. to use it, you pick one of these installation options, no cap:
- to install a global tool in the default location, use the
--globaloption. set it and forget it energy β¨ - to install a global tool in a custom location, use the
--tool-pathoption. main character, choosing her own path π - to install a local tool, just... omit the
--globaland--tool-pathoptions. that's the whole trick, bestie.
[!WARNING] make sure the directory you specify with the --tool-path option is secure. tools installed in this location can be executed directly, so using an untrusted or shared path might introduce security risks. do not play with this one fr fr π
π Installation locations
π Global tools
global tools get installed in these directories by default when you specify the -g or --global option:
- Linux/macOS β
$HOME/.dotnet/tools - Windows β
%USERPROFILE%\.dotnet\tools
executables are generated in these folders for each globally installed tool, although the actual tool binaries are nested deep into the sibling .store directory. sneaky little guys π«£
on Linux, after installing a command-line tool withdotnet tool, the tool can be executed only from the$HOME/.dotnet/toolspath. to make the tool executable from any directory, update thePATHenvironment variable. to make the updatedPATHenvironment variable permanent in your shell, update your shell settings. for Bash, this is the$HOME/.bashrcfile. β¨ go edit it, you got this.
π§° --tool-path tools
tools with explicit tool paths are stored wherever you specified the --tool-path parameter to point to. they're stored in the same way as global tools: an executable binary with the actual binaries in a sibling .store directory. same vibe, different address π
π Local tools
local tools are stored in the NuGet global directory, whatever you've set that to be. there are shim files in $HOME/.dotnet/toolResolverCache for each local tool that point to where the tools are within that location. shims = the little matchmakers π
references to local tools are added to a dotnet-tools.json file in a .config directory under the current directory. starting in .NET 10, if a manifest file doesn't exist yet, one is created automatically. you can also create one manually by running this command:
dotnet new tool-manifest
for more information, see Install a local tool.
π ARGUMENTS π
PACKAGE_NAMEβ name/ID of the NuGet package that contains the .NET tool to install. the ID of the thing you want, basically.
π OPTIONS π
--allow-downgradeβ allow package downgrade when installing or updating a .NET tool package. suppresses the warning, "The requested version x.x.x is lower than existing version x.x.x." yes she's going backwards, let her π«Ά--allow-roll-forwardβ available starting with .NET 9.0 SDK. allow tool to use a newer version of the .NET runtime if the runtime it targets isn't installed. future-proofing behavior π-a|--arch <ARCHITECTURE>β specifies the target architecture. this is a shorthand syntax for setting the Runtime Identifier (RID), where the provided value is combined with the default RID. for example, on awin-x64machine, specifying--arch x86sets the RID towin-x86. cute little abbreviation β¨--add-source <SOURCE>β adds an additional NuGet package source to use during installation. feeds are accessed in parallel, not sequentially in some order of precedence. if the same package and version is in multiple feeds, the fastest feed wins. it's giving race day π for more information, see What happens when a NuGet package is installed?.--configfile <FILE>β the NuGet configuration file (nuget.config) to use. if specified, only the settings from this file will be used. if not specified, the hierarchy of configuration files from the current directory will be used. for more information, see Common NuGet Configurations.--create-manifest-if-neededβ available starting in .NET 8 SDK. π
applies to local tools. to find a manifest, the search algorithm searches up the directory tree for dotnet-tools.json or a .config folder that contains a dotnet-tools.json file.
if a tool-manifest can't be found and the --create-manifest-if-needed option is set to false, the CannotFindAManifestFile error occurs. π
if a tool-manifest can't be found and the --create-manifest-if-needed option is set to true (or, in .NET 10 and later versions, when not specified), the tool creates a manifest automatically. it chooses a folder for the manifest as follows:
- walk up the directory tree searching for a directory that has a
.gitsubfolder. if one is found, create the manifest in that directory. - if the previous step doesn't find a directory, walk up the directory tree searching for a directory that has a
.slnor.gitfile. if one is found, create the manifest in that directory. - if neither of the previous two steps finds a directory, create the manifest in the current working directory.
for more information on how manifests are located, see Install a local tool.
starting in .NET 10, a manifest is created automatically if no tools manifest is found. this change can be a breaking change. you can opt out by passing --create-manifest-if-needed=false.
[!WARNING] don't run tool commands from the Downloads folder or any shared location. the CLI walks up the directory tree to find a tool manifest, which might cause it to use a manifest you don't expect. always run tool commands from a trusted, project-specific directory. π seriously, bestie, trust the vibe check on this one.
--disable-parallelβ prevent restoring multiple projects in parallel. one at a time, we're being calm now π§--framework <FRAMEWORK>β specifies the target framework to install the tool for. by default, the .NET SDK tries to choose the most appropriate target framework. she'll pick for you, she's good at it π-g|--globalβ specifies that the installation is user wide. can't be combined with the--tool-pathoption. omitting both--globaland--tool-pathspecifies a local tool installation. pick a lane, not both π--source <SOURCE>β specifies the source for NuGet packages. this source replaces all NuGet package sources. not adds β replaces. read it twice π₯-?|-h|--helpβ prints out a description of how to use the command. the classic cry for help, but helpful π«Ά--ignore-failed-sourcesβ treat package source failures as warnings. she's unbothered, moisturized, in her lane β¨--interactiveβ allows the command to stop and wait for user input or action. for example, to complete authentication. she's asking nicely π--localβ update the tool and the local tool manifest. can't be combined with the--globaloption or the--tool-pathoption. π--no-cacheor--no-http-cacheβ don't cache packages and HTTP requests. fresh every single time, no leftovers π--prereleaseβ include prerelease packages. living on the edge, iconic behavior π--tool-manifest <PATH>β path to the manifest file. that's it.--tool-path <PATH>β specifies the location to install the Global Tool.PATHcan be absolute or relative. ifPATHdoesn't exist, the command tries to create it. omitting both--globaland--tool-pathspecifies a local tool installation. β¨-v|--verbosity <LEVEL>β sets the verbosity level of the command. allowed values areq[uiet],m[inimal],n[ormal],d[etailed], anddiag[nostic]. for more information, see<xref:Microsoft.Build.Framework.LoggerVerbosity>. pick your volume, girl π--version <VERSION_NUMBER>β the version of the tool to install. by default, the latest stable package version is installed. use this option to install preview or older versions of the tool.
starting with .NET 8, --version Major.Minor.Patch refers to a specific major/minor/patch version, including unlisted versions. to get the latest version of a certain major/minor version instead, use --version Major.Minor.*. the asterisk is doing so much work here, periodt β
π EXAMPLES π
dotnet tool install -g dotnetsay
installs dotnetsay (https://www.nuget.org/packages/dotnetsay/) as a global tool in the default location. β¨
dotnet tool install dotnetsay --tool-path c:\global-tools
installs dotnetsay (https://www.nuget.org/packages/dotnetsay/) as a global tool in a specific Windows directory. πͺ
dotnet tool install dotnetsay --tool-path ~/bin
installs dotnetsay (https://www.nuget.org/packages/dotnetsay/) as a global tool in a specific Linux/macOS directory. π§π
dotnet tool install -g dotnetsay --version 2.0.0
installs version 2.0.0 of dotnetsay (https://www.nuget.org/packages/dotnetsay/) as a global tool. throwback era π
dotnet tool install dotnetsay
installs dotnetsay (https://www.nuget.org/packages/dotnetsay/) as a local tool for the current directory. π
dotnet tool install -g dotnetsay --verbosity minimal
installs dotnetsay (https://www.nuget.org/packages/dotnetsay/) as a global tool with the verbosity of minimal. the default verbosity for global tool is quiet. π€«
dotnet tool install -g dotnetsay --allow-roll-forward
installs dotnetsay (https://www.nuget.org/packages/dotnetsay/) as a global tool and allows it to run on newer .NET versions if the target runtime isn't available. future-proof queen π
π SEE ALSO β¨
okay bestie you're done here but if you wanna keep going (and honestly? iconic of you), go peek at these:
- π .NET tools β the whole big-picture vibe of .NET tools, iykyk
- π Tutorial: Install and use a .NET global tool using the .NET CLI β step-by-step hand-holding for global tools, no cap
- π¦ Tutorial: Install and use a .NET local tool using the .NET CLI β same energy but local tools, and yes it's worth it fr fr
that's the whole page, bestie π
you officially know everything this manpage knows. it's from the dotnet-tool-install(1) manual, dated 2025-10-30 β go install something cute π«Άβ¨
π¦ where this page comes from
- alpine 3.24: dotnet-doc 10.0.303-r2 Β· MIT
- centos-stream 10: dotnet-host 11.0.0~rc.2.26504.105-0.10.el10 Β· 0BSD AND Apache-2.0 AND (Apache-2.0 WITH LLVM-exception) AND APSL-2.0 AND BSD-2-Clause AND BSD-3-Clause AND BSD-4-Clause AND BSL-1.0 AND bzip2-1.0.6 AND CC0-1.0 AND CC-BY-3.0 AND CC-BY-4.0 AND CC-PDDC AND CNRI-Python AND EPL-1.0 AND GPL-2.0-only AND (GPL-2.0-only WITH GCC-exception-2.0) AND GPL-2.0-or-later AND GPL-3.0-only AND ICU AND ISC AND LGPL-2.1-only AND LGPL-2.1-or-later AND LicenseRef-Fedora-Public-Domain AND LicenseRef-ISO-8879 AND MIT AND MIT-Wu AND MS-PL AND MS-RL AND NCSA AND OFL-1.1 AND OpenSSL AND Unicode-DFS-2015 AND Unicode-DFS-2016 AND W3C-19980720 AND X11 AND Zlib
- centos-stream 9: dotnet-host 11.0.0~rc.2.26504.105-0.11.el9 Β· 0BSD AND Apache-2.0 AND (Apache-2.0 WITH LLVM-exception) AND APSL-2.0 AND BSD-2-Clause AND BSD-3-Clause AND BSD-4-Clause AND BSL-1.0 AND bzip2-1.0.6 AND CC0-1.0 AND CC-BY-3.0 AND CC-BY-4.0 AND CC-PDDC AND CNRI-Python AND EPL-1.0 AND GPL-2.0-only AND (GPL-2.0-only WITH GCC-exception-2.0) AND GPL-2.0-or-later AND GPL-3.0-only AND ICU AND ISC AND LGPL-2.1-only AND LGPL-2.1-or-later AND LicenseRef-Fedora-Public-Domain AND LicenseRef-ISO-8879 AND MIT AND MIT-Wu AND MS-PL AND MS-RL AND NCSA AND OFL-1.1 AND OpenSSL AND Unicode-DFS-2015 AND Unicode-DFS-2016 AND W3C-19980720 AND X11 AND Zlib
- fedora 43: dotnet-host 10.0.12-1.fc43
- fedora 43: dotnet-host 11.0.0~rc.1.26425.128-0.10.fc43 Β· 0BSD AND Apache-2.0 AND (Apache-2.0 WITH LLVM-exception) AND APSL-2.0 AND BSD-2-Clause AND BSD-3-Clause AND BSD-4-Clause AND BSL-1.0 AND bzip2-1.0.6 AND CC0-1.0 AND CC-BY-3.0 AND CC-BY-4.0 AND CC-PDDC AND CNRI-Python AND EPL-1.0 AND GPL-2.0-only AND (GPL-2.0-only WITH GCC-exception-2.0) AND GPL-2.0-or-later AND GPL-3.0-only AND ICU AND ISC AND LGPL-2.1-only AND LGPL-2.1-or-later AND LicenseRef-Fedora-Public-Domain AND LicenseRef-ISO-8879 AND MIT AND MIT-Wu AND MS-PL AND MS-RL AND NCSA AND OFL-1.1 AND OpenSSL AND Unicode-DFS-2015 AND Unicode-DFS-2016 AND W3C-19980720 AND X11 AND Zlib
- fedora 44: dotnet-host 10.0.12-1.fc44
- fedora 44: dotnet-host 10.0.4-1.fc44 Β· 0BSD AND Apache-2.0 AND (Apache-2.0 WITH LLVM-exception) AND APSL-2.0 AND BSD-2-Clause AND BSD-3-Clause AND BSD-4-Clause AND BSL-1.0 AND bzip2-1.0.6 AND CC0-1.0 AND CC-BY-3.0 AND CC-BY-4.0 AND CC-PDDC AND CNRI-Python AND EPL-1.0 AND GPL-2.0-only AND (GPL-2.0-only WITH GCC-exception-2.0) AND GPL-2.0-or-later AND GPL-3.0-only AND ICU AND ISC AND LGPL-2.1-only AND LGPL-2.1-or-later AND LicenseRef-Fedora-Public-Domain AND LicenseRef-ISO-8879 AND MIT AND MIT-Wu AND MS-PL AND MS-RL AND NCSA AND OFL-1.1 AND OpenSSL AND Unicode-DFS-2015 AND Unicode-DFS-2016 AND W3C-19980720 AND X11 AND Zlib
- fedora 44: dotnet-host 11.0.0~rc.1.26425.128-0.12.fc44 Β· 0BSD AND Apache-2.0 AND (Apache-2.0 WITH LLVM-exception) AND APSL-2.0 AND BSD-2-Clause AND BSD-3-Clause AND BSD-4-Clause AND BSL-1.0 AND bzip2-1.0.6 AND CC0-1.0 AND CC-BY-3.0 AND CC-BY-4.0 AND CC-PDDC AND CNRI-Python AND EPL-1.0 AND GPL-2.0-only AND (GPL-2.0-only WITH GCC-exception-2.0) AND GPL-2.0-or-later AND GPL-3.0-only AND ICU AND ISC AND LGPL-2.1-only AND LGPL-2.1-or-later AND LicenseRef-Fedora-Public-Domain AND LicenseRef-ISO-8879 AND MIT AND MIT-Wu AND MS-PL AND MS-RL AND NCSA AND OFL-1.1 AND OpenSSL AND Unicode-DFS-2015 AND Unicode-DFS-2016 AND W3C-19980720 AND X11 AND Zlib
- nixpkgs unstable: dotnet-vmr 11.0.0-rc.3
- ubuntu noble: dotnet-host-10.0 10.0.12-0ubuntu1~24.04.1
- ubuntu questing: dotnet-host-10.0 10.0.9-0ubuntu1~25.10.1
- ubuntu resolute: dotnet-host-10.0 10.0.12-0ubuntu1~26.04.1
- ubuntu resolute: dotnet-host-10.0 10.0.5-0ubuntu1 Β· MIT
- ubuntu stonking: dotnet-host-10.0 10.0.12-0ubuntu2 Β· MIT
- ubuntu stonking: dotnet-host-11.0 11.0.0~rc1-0ubuntu1 Β· MIT
- ubuntu stonking: dotnet-host-11.0 11.0.0~rc3-0ubuntu1~26.10.1 Β· MIT
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms