>
Directory.Packages.props file, making version governance and upgrades easier across multi-project repositories..csproj, .fsproj, or .vbproj files and the user wants a single source of truthDirectory.Packages.props, CPM, or centralizing NuGet versionsPackageReference and CPM is not already enabledpackages.config-based projects (must first migrate to PackageReference)| Input | Required | Description |
|---|---|---|
| Scope | Yes | A project file, solution file, or directory containing .NET projects to convert |
| Version conflict strategy | No | How to resolve cases where the same package has different versions across projects. When conflicts are detected, do not assume a default strategy -- ask the user which strategy to use or explicitly confirm a proposed strategy before proceeding. |
.csproj, .fsproj, or .vbproj..sln or .slnx. List projects with dotnet sln list.packages.config instead of PackageReference. Look for packages.config files alongside project files. If any packages.config usage is detected, stop and do not proceed with the conversion. Inform the user that CPM requires projects with PackageReference format and that they must first migrate from packages.config to PackageReference (e.g., using Visual Studio's built-in migration or the dotnet migrate tooling). This skill cannot perform that migration.dotnet clean, then dotnet build -bl:baseline.binlog, then dotnet package list --format json > baseline-packages.json. Read baseline-comparison.md [blocked] for the full procedure and fallback options. If the baseline build fails, stop and inform the user -- the scope must build cleanly before conversion. Do not delete baseline.binlog or baseline-packages.json -- they are needed for the post-conversion comparison and report.Directory.Packages.props in scope or ancestor directories. If CPM is already fully enabled, inform the user and stop. If a Directory.Packages.props exists without CPM enabled, ask whether to add the property to the existing file or create a new one.dotnet package list --format json to get the resolved package references across all in-scope projects. Also scan <Import> elements to discover shared .props/.targets files containing package references.VersionOverride usage. Read audit-complexities.md [blocked] for the full checklist.VersionOverride, etc.) with their trade-offs. Do not upgrade any package beyond the highest version already in use across the scope -- this avoids introducing version incompatibilities or breaking changes that are unrelated to the CPM conversion itself. Note any known security advisories or other upgrade opportunities as follow-up items for the user to address after the conversion is complete. Ask the user to decide on each conflict before proceeding. Read audit-complexities.md - Same package with different versions [blocked] for the resolution workflow and presentation format.dotnet new packagesprops (.NET 8+) or manually. Add a <PackageVersion> entry for each unique package sorted alphabetically. For conditional versions or VersionOverride patterns, read directory-packages-props.md [blocked].Version attribute from every <PackageReference> that now has a corresponding <PackageVersion>. Also update any shared .props/.targets files identified in step 4.PrivateAssets, IncludeAssets, ExcludeAssets, GeneratePathProperty, Aliases)<ItemGroup> elements -- only remove the Version attribute within themVersionOverride (with user confirmation) when a project needs a different version than the central onePackageReference items that used MSBuild properties for versions, determine whether to inline the resolved value or keep the property reference in Directory.Packages.props. After validation succeeds in step 8, remove inlined version properties from Directory.Build.props or other files, verifying they have no remaining references. Read msbuild-property-handling.md [blocked] for the decision workflow, import order requirements, and cleanup procedure.dotnet clean, then dotnet build -bl:after-cpm.binlog, then dotnet package list --format json > after-cpm-packages.json. Read baseline-comparison.md [blocked] for the full procedure. If errors occur, read validation-and-errors.md [blocked] for NuGet error codes and multi-TFM guidance.baseline.binlog, after-cpm.binlog, baseline-packages.json, after-cpm-packages.json). These files must be preserved for the user to inspect after the conversion. They are deliverables, not temporary files.convert-to-cpm.md file alongside the binlog and JSON artifacts. Do not skip this step or substitute inline chat output for the file -- the user needs a persistent, shareable document. This file should be self-contained and shareable -- suitable for a pull request description, a team review, or a record of what was done. Structure the report with the following sections:VersionOverride, etc.)baseline-packages.json and after-cpm-packages.json per project. See baseline-comparison.md [blocked] for the comparison procedure. Present two tables:VersionOverride was introduced, or a package was added/removed. Include a status column explaining what changed and why (e.g., "VersionOverride -- project retains pinned version", "Aligned to highest version").dotnet test as a final check.dotnet test to verify no regressions.dotnet test, and comparing binlogs before merging.VersionOverride usage that partially undermines centralization, or MSBuild property removal that could affect other build logic.dotnet package list --vulnerable or noted during the audit), list each advisory with the package name, current version, affected projects, and the minimum patched version. These upgrades are out of scope for the CPM conversion to avoid introducing version incompatibilities or breaking changes.VersionOverride was used to preserve differing versions, note that the user may want to align these in the future once the affected projects can be validated against the central version.dotnet test to validate runtime behavior beyond build success, especially if any version conflicts were resolved by aligning to the highest version.baseline.binlog and after-cpm.binlog -- MSBuild binary logs captured before and after conversion. These are available for manual validation and troubleshooting if needed.baseline-packages.json and after-cpm-packages.json -- Machine-readable snapshots of resolved package versions per project, used to produce the comparison tables above.convert-to-cpm.md -- This report file, suitable for use as a pull request description or team review artifact.dotnet test to validate runtime behavior beyond build success. If any version conflicts were resolved by aligning to the highest version, recommend reviewing the release notes for the affected packages.Directory.Packages.props exists with ManagePackageVersionsCentrally set to truePackageReference either has no Version attribute or uses VersionOverridePackageVersion entrydotnet restore and dotnet build complete without errors from a clean state