A .NET CLI tool for managing versions and changelogs across multiple projects in a repository.
dotnet tool install --global Cxsetdotnet tool uninstall --global Cxsetdnx cxset addThis will:
- List all eligible
.csprojfiles (those with a<Version>element) - Prompt you to select which projects are affected (comma-separated numbers or
afor all) - Ask for the change type: patch, minor, or major
- Ask for a description of the changes (enter an empty line to finish)
A changeset file is created in .changes/ with the following format:
---
changeset: minor
timestamp: 2026-02-04T15:00:00Z
projects:
- src/MyProject/MyProject.csproj
- src/MyLibrary/MyLibrary.csproj
---
Added new feature X
Fixed bug Ydnx cxset publishThis will:
- Read all pending changesets from
.changes/ - Determine the version bump based on the largest change type (major > minor > patch)
- Bump the version (stored in
.changes/.version, starting from0.0.0) - Update the
<Version>element in each affected.csprojfile - Append entries to
CHANGELOG.mdin each affected project's directory - Delete the processed changeset files
| Change Type | Example |
|---|---|
| patch |
1.2.3 → 1.2.4
|
| minor |
1.2.3 → 1.3.0
|
| major |
1.2.3 → 2.0.0
|
When multiple changesets exist, the largest change type wins.
For a project to be eligible for version management, it must have a <Version> element in its .csproj file:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<Version>1.0.0</Version>
</PropertyGroup>
</Project>| Path | Description |
|---|---|
.changes/*.md |
Pending changeset files |
.changes/.version |
Current version tracker |
{project}/CHANGELOG.md |
Per-project changelog |
# Make some changes to ProjectA and ProjectB
git add .
# Record what changed
dnx cxset add
# Select: 1, 2 (ProjectA and ProjectB)
# Type: 2 (minor)
# Description: Added user authentication
# Make more changes to just ProjectA
git add .
dnx cxset add
# Select: 1 (ProjectA only)
# Type: 1 (patch)
# Description: Fixed login bug
# When ready to release
dnx cxset publish
# Both projects get version bump (minor wins)
# ProjectA CHANGELOG has both entries
# ProjectB CHANGELOG has only the first entry- .NET 10.0 SDK or later
MIT