dotnet-migration-assessment-bundle
Read-only workflow bundle for migration assessment ahead of large .NET Framework → modern .NET (e.g. .NET 8) moves. It runs 4 atomic mining codemods/analyzers in one pass and accumulates metrics in the Codemod run output — no files are written to the target repo.
Use it to baseline project shape, dependency risk, legacy code patterns, and configuration surface area before you commit to a migration plan or estimate.
Metrics
Each metric is emitted as a counted cardinality record: a set of metadata fields (cardinality) plus a count. Below are the seven primary metrics, their fields, and representative examples from fixture runs.
dotnet-project-inventory
Per-project classification from .csproj / .vbproj files.
| Field | Description |
|---|---|
projectPath | Relative path to the project file |
projectName | Project name (filename without extension) |
projectType | Detected archetype (aspnet-mvc, webforms, wcf, ef6, console, library, test, …) |
targetFramework | Current TFM (e.g. net472, net48) |
sdkStyle | yes if SDK-style project, otherwise no |
language | csharp or vb |
outputType | Library, Exe, WinExe, … |
isTestProject | yes / no |
migrationTarget | Suggested destination (e.g. ASP.NET Core MVC, EF Core, Rewrite) |
json
dotnet-solution-inventory
Solution-level footprint from .sln files.
| Field | Description |
|---|---|
solutionPath | Relative path to the solution file |
projectCount | Number of projects referenced in the solution |
json
dotnet-loc-inventory
Non-blank line counts for .cs and .vb source files — useful for sizing rewrite effort.
| Field | Description |
|---|---|
file | Relative path to the source file |
language | csharp or vb |
loc | Non-blank line count |
json
dotnet-framework-migration-matrix
Aggregated migration signals rolled up by detected technology — a quick view of what you have and where it should land.
| Field | Description |
|---|---|
technology | Project archetype (aspnet-mvc, webforms, wcf, ef6, …) |
migration | Suggested migration destination |
count | Number of projects with this technology (always "1" per record; aggregate in dashboards) |
json
dotnet-nuget-dependency
Per-dependency migration risk from PackageReference, packages.config, GAC, and HintPath references.
| Field | Description |
|---|---|
packageId | NuGet package or assembly name |
version | Resolved version (empty for GAC / some binary refs) |
source | PackageReference, packages.config, gac, hintpath |
projectPath | Project that references the package |
riskTier | supported, requires-upgrade, deprecated, unsupported, custom-binary, gac |
risk | Severity: low, medium, high, critical |
targetVersion | Recommended replacement or upgrade target |
json
dotnet-csharp-pattern
Legacy platform APIs and migration-sensitive code patterns in .cs files.
| Field | Description |
|---|---|
pattern | Detected pattern name (e.g. HttpContext.Current, BinaryFormatter, EF6 DbContext) |
category | code-pattern or platform |
autoFix | Codemod feasibility: yes, partial, no |
risk | low, medium, high, critical |
file | Source file path |
line | Line number of the finding |
snippet | Short matched text |
json
dotnet-config-pattern
Legacy configuration in App.config, Web.config, and transform files.
| Field | Description |
|---|---|
pattern | Config section or pattern (e.g. system.web, entityFramework config, appSettings) |
configType | config, transform, settings, runtime, web, ef |
autoFix | Codemod feasibility: yes, partial, no |
risk | low, medium, high |
file | Config file path |
matchCount | Number of matches in the file |
json
Bundled miners
| Step | Codemod | Metrics |
|---|---|---|
| 1 | dotnet-project-inventory-mining | dotnet-project-inventory, dotnet-solution-inventory, dotnet-loc-inventory, dotnet-archetype-signal, dotnet-framework-migration-matrix |
| 2 | dotnet-nuget-dependency-mining | dotnet-nuget-dependency |
| 3 | dotnet-csharp-pattern-mining | dotnet-csharp-pattern |
| 4 | dotnet-config-pattern-mining | dotnet-config-pattern |
Need a deeper assessment?
These analyzers are a solid starting point for portfolio-wide baselines, but every legacy .NET estate has its own frameworks, internal libraries, and migration constraints. The patterns, risk tiers, and migration targets here reflect common cases — not your specific codebase.
Reach out to the Codemod team if you want a more advanced version of these analyzers tailored to your stack: custom pattern libraries, org-specific NuGet compatibility rules, archetype detection for internal frameworks, and dashboards wired to your migration milestones.