Incrementalist 1.0.0-beta4

This is a prerelease version of Incrementalist.
There is a newer version of this package available.
See the version list below for details.
dotnet add package Incrementalist --version 1.0.0-beta4
                    
NuGet\Install-Package Incrementalist -Version 1.0.0-beta4
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Incrementalist" Version="1.0.0-beta4" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Incrementalist" Version="1.0.0-beta4" />
                    
Directory.Packages.props
<PackageReference Include="Incrementalist" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Incrementalist --version 1.0.0-beta4
                    
#r "nuget: Incrementalist, 1.0.0-beta4"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Incrementalist@1.0.0-beta4
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Incrementalist&version=1.0.0-beta4&prerelease
                    
Install as a Cake Addin
#tool nuget:?package=Incrementalist&version=1.0.0-beta4&prerelease
                    
Install as a Cake Tool

🔄 Incrementalist

<img src="https://raw.githubusercontent.com/petabridge/Incrementalist/refs/heads/dev/docs/incrementalist-logo-dark.svg" width="90" alt="Incrementalist Logo" />

Incrementalist is a .NET tool that leverages libgit2sharp and Roslyn to compute incremental build steps for large .NET solutions. It helps optimize your CI/CD pipeline by building and testing only the projects affected by your changes.

🎯 When to Use Incrementalist

Incrementalist is particularly valuable for:

  • 🏗️ Large Solutions: If your solution contains dozens or hundreds of projects, Incrementalist can significantly reduce build times by only building what's necessary.
  • 📦 Monorepos: When managing multiple applications or services in a single repository, Incrementalist helps identify and build only the affected components.
  • 🌐 Microservice Architectures: In repositories containing multiple microservices, build only the services impacted by your changes.
  • 🔗 Complex Dependencies: When projects have intricate dependencies, Incrementalist automatically determines the complete build graph.
  • CI/CD Optimization: Reduce CI/CD pipeline execution time by skipping unnecessary builds and tests.

⚙️ Requirements

  • .NET 8.0 SDK or later
  • Git installed and available in the system PATH

📥 Installation

Incrementalist is available in two forms:

  1. Incrementalist Library - a .NET 8 library for programmatic use
  2. Incrementalist.Cmd - a dotnet tool for command-line use (recommended)

Install the command-line tool globally:

dotnet tool install --global Incrementalist.Cmd

Or install locally in your project:

# From your repository root
dotnet new tool-manifest # if you haven't already created a .config/dotnet-tools.json
dotnet tool install Incrementalist.Cmd

Running as a Global Tool

When installed globally, run commands directly using the incrementalist command:

# Get list of affected projects
incrementalist -b dev -f ./affected-projects.txt

# Run tests for affected projects
incrementalist -b dev -r -- test -c Release --no-build --nologo

Running as a Local Tool

When using Incrementalist as a local tool, you need to use dotnet tool run with an additional -- before the Incrementalist commands:

# Get list of affected projects
dotnet tool run incrementalist -- -b dev -f ./affected-projects.txt

# Build affected projects
dotnet tool run incrementalist -- -b dev -r -- build -c Release --nologo

# Run tests with coverage
dotnet tool run incrementalist -- -b dev -r -- test -c Release --no-build --logger:trx --collect:"XPlat Code Coverage" --results-directory ./testresults

# Run in parallel mode
dotnet tool run incrementalist -- -b dev -r --parallel -- build -c Release --nologo

# Save affected projects AND run commands
dotnet tool run incrementalist -- -b dev -f ./affected-projects.txt -r -- build -c Release --nologo

Note the command structure when using as a local tool:

  • First -- after dotnet tool run incrementalist is for Incrementalist options
  • Second -- (if using -r) is for the dotnet command to run on affected projects

🚀 Quick Start Examples

# Get list of affected projects and save to file
incrementalist -b dev -f ./affected-projects.txt

# Specify solution explicitly
incrementalist -s ./src/MySolution.sln -b dev -f ./affected-projects.txt

# Get list of affected folders
incrementalist -b dev -l -f ./affected-folders.txt

# Build only affected projects
incrementalist -b dev -r -- build -c Release --nologo

# Run tests for affected projects
incrementalist -b dev -r -- test -c Release --no-build --nologo

# Run tests with code coverage
incrementalist -b dev -r -- test -c Release --no-build --nologo /p:CollectCoverage=true /p:CoverletOutputFormat=cobertura /p:CoverletOutput=./coverage/

# Save affected projects AND run commands
incrementalist -b dev -f ./affected-projects.txt -r -- build -c Release --nologo

📄 Output Files

Incrementalist can generate two types of output files using -f, --file:

  1. Project Lists (default):

    D:\src\Project1\Project1.csproj,D:\src\Project2\Project2.csproj
    
  2. Folder Lists (with -l, --folders-only):

    D:\src\Project1,D:\src\Project2\SubFolder
    

These files can be used in build scripts, CI/CD pipelines, or other automation tools.

🛠️ Command-Line Options

  -s, --sln             Optional. Solution file to analyze. Uses first .sln in
                        current directory if not specified.

  -f, --file            Optional. Write output to the specified file.

  -l, --folders-only    Optional. List affected folders instead of projects.

  -b, --branch          Required. (Default: dev) Git branch to compare against
                        (e.g., 'dev' or 'master').

  -d, --dir             Optional. Working directory. Defaults to current directory.

  --verbose             Optional. (Default: false) Enable debug logging.

  -t, --timeout         Optional. (Default: 2) Solution load timeout in minutes.

  -r, --run            Optional. Run dotnet CLI command against affected projects.
                       All arguments after -- are passed to dotnet.

  --continue-on-error   Optional. (Default: true) Continue executing commands even
                       if some fail.

  --parallel           Optional. (Default: false) Execute commands in parallel.

  --fail-on-no-projects Optional. (Default: false) Fail if no projects are affected.

  --no-cache           Optional. (Default: false) Ignore any existing cache file
                      and perform a full Roslyn analysis.

  --help                Display help screen.

  --version             Display version information.

⚡ Running Commands

Execute dotnet CLI commands against affected projects:

# Build affected projects
incrementalist -b dev -r -- build -c Release --nologo

# Run tests
incrementalist -b dev -r -- test -c Release --no-build --nologo

# Run in parallel
incrementalist -b dev -r --parallel -- build -c Release --nologo

# Stop on first error
incrementalist -b dev -r --continue-on-error=false -- build -c Release --nologo

📚 Documentation

📜 License

Licensed under the Apache License, Version 2.0: http://www.apache.org/licenses/LICENSE-2.0

Copyright 2015-2025 Petabridge

Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.1.0 153 9/3/2025
1.1.0-beta1 241 5/12/2025
1.0.0 170 4/18/2025
1.0.0-rc5 197 4/17/2025
1.0.0-rc4 193 4/17/2025
1.0.0-rc3 176 4/16/2025
1.0.0-rc2 213 4/14/2025
1.0.0-rc1 196 4/13/2025
1.0.0-beta4 97 2/25/2025
1.0.0-beta3 96 2/25/2025
1.0.0-beta2 98 2/24/2025
1.0.0-beta1 102 2/21/2025
0.9.0 311 11/22/2023
0.8.0 540 11/24/2022
0.7.0 559 5/24/2022
0.6.0 471 11/10/2021
0.5.0 483 6/16/2021
0.4.0 477 12/23/2020
0.3.0 673 9/26/2020
0.2.2 609 2/14/2020
0.2.1 611 11/18/2019
0.2.0 607 10/29/2019
0.1.7 645 9/9/2019
0.1.6 600 8/30/2019
0.1.5 657 8/30/2019
0.1.4 670 5/17/2019
0.1.3 681 5/15/2019
0.1.2 666 5/8/2019
0.1.1 660 5/8/2019

* [Added support for `IProgress<ProjectLoadProgress>` to MSBuild](https://github.com/petabridge/Incrementalist/pull/353)
* [Fix cli parsing](https://github.com/petabridge/Incrementalist/pull/349)
* [Bumped Roslyn to 4.13.0](https://github.com/petabridge/Incrementalist/pull/351)