Converts a project to use Centralised Package Management
To convert a large project to centralised package management, you need to:
Directory.Packages.props
fileThis can be laborious for large projects, hence this tool.
Centralised Package Converter supports both C# and F# projects.
You can install the tool by running:
dotnet tool install CentralisedPackageConverter --global
Then just run the tool:
central-pkg-converter /Users/markotway/SomeAwesomeProject
Run the command, passing a folder as the only parameter. The tool will scan for all .NET project files within that
folder tree, gather up a list of all of the versioned references in the projects, and will then remove the versions
from the project file, and write the entries to the Directory.Packages.props
file.
-r
, --revert
: Revert from Centralised Package Management to project-file-based versions.-d
, --dry-run
: Read-only mode (make no changes on disk).-f
: Force changes (don't prompt/check for permission before continuing).-m
: Merge changes with existing directory file.-t
, --transitive-pinning
: Force versions on transitive dependencies (CentralPackageTransitivePinningEnabled=true).-e
, --encoding
: Encoding of written files, IANA web name (e.g. utf-8
, utf-16
). Default is picked by .NET implementation.-l
, --linewrap
: Line wrap style: lf
=Unix, crlf
=Windows, cr
=Mac. Default is system style.-v
, --min-version
: Pick minimum instead of maximum package version number.-p
, --ignore-prerelease
: Ignore prerelease versions.-c
, --version-comparison
: Which NuGet version parts to consider: Default
, Version
, VersionRelease
, VersionReleaseMetadata
(enum NuGet.Versioning.VersionComparison
).-x
, --exclude-dirs
, (Default = ^\.|^bin$|^obj$
) Exclude directories matching this regular expression (not search pattern!).Central Package Management CPM does not support floating versions, such as wildcards or range operators.
Omitted digits will be implicitly added: "8" == "8.0" == "8.0.0".
The Directory.Packages.props file may be invalid or incomplete:
In these cases, manual edits or version selection will be necessary.
Thanks to Thomas Ardal for the suggestion and pointers to get this pushed as a dotnet global command. And thanks to all of the other contributors who have helped make this tool even better.