A Cake Module that extends Cake with functionality to install tools from a .NET tool manifest.
The major version and target framework of the package tracks the version of Cake it was built for.
Currently, version 3.*
of Cake.DotNetLocalTools.Module
is built for Cake 3.0 and support .NET 6 and .NET 7.
Cake allows installing .NET CLI Tools through the #tool
preprocessor directies and Cake.Frosting's InstallTool
method (see Installing and using tools for details).
.NET Core 3.1 introduced the concept of "local tools".
Local tools are listed in a "tool manifest" (dotnet-tools.json
) and run through the dotnet
command.
Cake.DotNetLocalTools.Module
brings these two concepts together.
It reads a list of tools from one or more tool manifests and installs them through Cake's tool infrastructure.
This way, you can easily use the tools from Cake while still having the tools and their versions described in a common format.
To use the module in a Cake script file, perform the following steps d
-
Add the preprocessor directive to install the module
#module nuget:?package=Cake.DotNetLocalTools.Module&version=VERSION
-
Install tools using the
#tool
preprocessor directive and a uri scheme oftoolmanifest
:#tool "toolmanifest:?package=.config/dotnet-tools.json"
To use the module in a Cake.Frosting project, perform the following steps.
-
Install the module package by adding a package reference to your project
<PackageReference Include="Cake.DotNetLocalTools.Module" Version="VERSION" />
-
Register
LocalToolsModule
with the Cake Host:using Cake.DotNetLocalTools.Module; public static int Main(string[] args) { return new CakeHost() // Register LocalToolsModule .UseModule<LocalToolsModule>() // Continue with the standard setup of a Cake.Frosting project .UseContext<BuildContext>() .Run(args); }
-
You can not install tools using either the
InstallToolsFromManifest()
method or usingInstallTools()
with a uri scheme oftoolmanifest
:using Cake.DotNetLocalTools.Module; public static int Main(string[] args) { return new CakeHost() // Register LocalToolsModule .UseModule<LocalToolsModule>() // Install Tools (both install options are equivalent) .InstallToolsFromManifest(".config/dotnet-tools.json") .InstallTools(new Uri("tool-manifest:?package=.config/dotnet-tools.json")) // Continue with the standard setup of a Cake.Frosting project .UseContext<BuildContext>() .Run(args); }
Installing tools from a tool manifest is equivalent to installing the tools listed in the manifest using a #tool
preprocessor directive or through InstallTool()
.
For example, a tool manifest at .config/dotnet-tools.json
could look like this:
{
"version": 1,
"isRoot": true,
"tools": {
"nbgv": {
"version": "3.4.231",
"commands": [
"nbgv"
]
},
"dotnet-format": {
"version": "5.1.225507",
"commands": [
"dotnet-format"
]
},
"dotnet-reportgenerator-globaltool": {
"version": "4.8.12",
"commands": [
"reportgenerator"
]
}
}
}
Tools from the manifest can be installed using
#tool "toolmanifest:?package=.config/dotnet-tools.json"
This is equivalent to installing each tool individually:
#tool "dotnet:?package=nbgv&version=3.4.231"
#tool "dotnet:?package=dotnet-format&version=5.1.225507"
#tool "dotnet:?package=dotnet-reportgenerator-globaltool&version=4.8.12"
Note: This repository uses git submodules, so please use git clone --recursive
to also clone the submodules.
Building the project from source requires the .NET 7 SDK (version 7.0.100 as specified in global.json).
To build the project, run
.\build.ps1
This will
- Download the required version of the .NET SDK
- Build the project
- Run all tests
- Pack the NuGet package.
The version of the library is automatically derived from git and the information
in version.json
using Nerdbank.GitVersioning:
- The master branch always contains the latest version. Packages produced from
master are always marked as pre-release versions (using the
-pre
suffix). - Stable versions are built from release branches. Build from release branches
will have no
-pre
suffix - Builds from any other branch will have both the
-pre
prerelease tag and the git commit hash included in the version string
To create a new release branch use the nbgv
tool:
dotnet tool install --global nbgv
nbgv prepare-release