Skill
solution-health
Analyze solution structure for orphaned projects, circular dependencies, and TFM inconsistencies
From dotnetInstall
1
Run in your terminal$
npx claudepluginhub melodic-software/claude-code-plugins --plugin dotnetTool Access
This skill is limited to using the following tools:
BashReadGlobGrep
Skill Content
/dotnet:solution-health
Comprehensive solution health analysis covering structure, dependencies, versioning, and best practices.
Arguments
Parse arguments from $ARGUMENTS:
| Flag | Description | Default |
|---|---|---|
--solution <path> | Target solution (fuzzy matching) | Auto-detect |
--check <category> | Run specific check only | All checks |
--fix-suggestions | Include actionable fix commands | true |
Health Checks
| Check | Category | Description |
|---|---|---|
| Orphaned projects | structure | Projects in folder but not in .sln |
| Missing references | dependencies | Referenced projects that don't exist |
| Circular dependencies | dependencies | A -> B -> A cycles |
| TFM inconsistencies | versioning | Mixed target frameworks |
| Duplicate packages | packages | Same package, different versions |
| Central package management | packages | Directory.Packages.props status |
| Build props | config | Directory.Build.props presence |
| EditorConfig | config | .editorconfig presence |
| Git ignored artifacts | hygiene | bin/obj in git |
Workflow
Step 1: Locate Solution
Find and parse solution file:
# Find .sln files
find . -name "*.sln" -maxdepth 2
# Parse solution for project references
grep "Project(" *.sln
Step 2: Run Health Checks
Execute each check and collect findings.
Step 3: Generate Report
Output Format
Solution Health Report
Solution: MyApp.sln
Location: D:\repos\myapp
Projects: 12
Generated: 2026-01-18 11:00:00 UTC
═══════════════════════════════════════════════════════════════
HEALTH SCORE: 78/100
═══════════════════════════════════════════════════════════════
┌─────────────────────────────────────────────────────────────┐
│ Category Status Issues Score │
├─────────────────────────────────────────────────────────────┤
│ Structure Warning 1 15/20 │
│ Dependencies Pass 0 20/20 │
│ Versioning Warning 2 12/20 │
│ Packages Warning 3 16/20 │
│ Configuration Pass 0 15/20 │
└─────────────────────────────────────────────────────────────┘
───────────────────────────────────────────────────────────────
STRUCTURE CHECKS
───────────────────────────────────────────────────────────────
[WARNING] Orphaned Projects Found
Projects in filesystem but not in solution:
- tools/CodeGen/CodeGen.csproj
- experimental/Prototype/Prototype.csproj
Fix: Add to solution or delete if unused
dotnet sln add tools/CodeGen/CodeGen.csproj
dotnet sln add experimental/Prototype/Prototype.csproj
[PASS] No Missing Project References
All referenced projects exist and are resolvable.
[PASS] No Circular Dependencies
Dependency graph is acyclic.
───────────────────────────────────────────────────────────────
VERSIONING CHECKS
───────────────────────────────────────────────────────────────
[WARNING] Inconsistent Target Frameworks
Most projects: net10.0 (10 projects)
Outliers:
- src/Legacy/Legacy.csproj: net8.0
- tests/Integration/Integration.csproj: net9.0
Recommendation: Standardize TFMs across solution
Run: /dotnet:update-dotnet-version --check-only
[WARNING] LangVersion Not Standardized
Projects without explicit LangVersion: 4
Projects with LangVersion: 8
Recommendation: Set LangVersion in Directory.Build.props
[INFO] SDK Version
global.json: 10.0.100 (rollForward: latestPatch)
Installed: 10.0.100
───────────────────────────────────────────────────────────────
PACKAGE CHECKS
───────────────────────────────────────────────────────────────
[WARNING] Duplicate Package Versions
Newtonsoft.Json:
- 13.0.1 in src/MyApp.Core
- 13.0.3 in src/MyApp.Api
- 12.0.3 in src/Legacy
Microsoft.Extensions.Logging:
- 8.0.0 in 3 projects
- 10.0.0 in 7 projects
Fix: Consolidate versions or enable Central Package Management
[WARNING] Central Package Management Not Enabled
You have 12 projects with package references.
Central Package Management would consolidate version management.
Enable:
1. Create Directory.Packages.props
2. Add <ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
3. Move versions from .csproj to Directory.Packages.props
[PASS] No Vulnerable Packages
Run 'dotnet list package --vulnerable' returned no results.
───────────────────────────────────────────────────────────────
CONFIGURATION CHECKS
───────────────────────────────────────────────────────────────
[PASS] Directory.Build.props Found
Location: D:\repos\myapp\Directory.Build.props
Contents:
- TreatWarningsAsErrors: true
- Nullable: enable
- ImplicitUsings: enable
[PASS] .editorconfig Found
Location: D:\repos\myapp\.editorconfig
Enforcing: 45 rules
[PASS] .gitignore Configured
bin/ and obj/ are properly ignored.
───────────────────────────────────────────────────────────────
RECOMMENDATIONS
───────────────────────────────────────────────────────────────
Priority fixes to improve health score:
1. [EASY] Add orphaned projects to solution
Impact: +5 points
Command: dotnet sln add tools/CodeGen/CodeGen.csproj
2. [MEDIUM] Standardize target frameworks
Impact: +8 points
Command: /dotnet:update-dotnet-version
3. [MEDIUM] Enable Central Package Management
Impact: +5 points
Creates: Directory.Packages.props
4. [EASY] Consolidate Newtonsoft.Json versions
Impact: +2 points
Command: Update all to 13.0.3
───────────────────────────────────────────────────────────────
PROJECT DEPENDENCY GRAPH
───────────────────────────────────────────────────────────────
MyApp.Api
└── MyApp.Core
└── MyApp.Infrastructure
└── MyApp.Core
└── MyApp.Domain
└── MyApp.Domain
MyApp.Tests
└── MyApp.Api
└── MyApp.Core
(No circular dependencies detected)
Check Details
Orphaned Projects
Projects found in filesystem but not referenced in .sln:
# Find all .csproj files
find . -name "*.csproj" -type f
# Compare against solution references
# Report difference
Circular Dependencies
Build dependency graph from ProjectReference elements:
<ProjectReference Include="..\Other\Other.csproj" />
Detect cycles using DFS traversal.
TFM Inconsistencies
Parse TargetFramework(s) from all projects:
grep -h "<TargetFramework" **/*.csproj
Report when projects use different TFMs without apparent reason.
Duplicate Package Versions
Parse PackageReference elements:
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
Group by package, flag different versions.
Examples
# Full health check
/dotnet:solution-health
# Check specific category only
/dotnet:solution-health --check dependencies
# Check specific solution
/dotnet:solution-health --solution MyApp.sln
# Quick check without fix suggestions
/dotnet:solution-health --fix-suggestions false
Health Score Calculation
| Category | Max Points | Criteria |
|---|---|---|
| Structure | 20 | No orphaned projects, no missing refs |
| Dependencies | 20 | No circular deps, clean graph |
| Versioning | 20 | Consistent TFMs, global.json present |
| Packages | 20 | No duplicates, CPM enabled, no vulnerabilities |
| Configuration | 20 | Build.props, editorconfig, gitignore |
Score Interpretation:
- 90-100: Excellent - Well-maintained solution
- 70-89: Good - Minor improvements recommended
- 50-69: Fair - Several issues to address
- Below 50: Needs attention - Significant technical debt
Similar Skills
Stats
Parent Repo Stars40
Parent Repo Forks6
Last CommitFeb 15, 2026