XrmToolSuite.SolutionComplexityScore
1.2026.7.12
dotnet add package XrmToolSuite.SolutionComplexityScore --version 1.2026.7.12
NuGet\Install-Package XrmToolSuite.SolutionComplexityScore -Version 1.2026.7.12
<PackageReference Include="XrmToolSuite.SolutionComplexityScore" Version="1.2026.7.12" />
<PackageVersion Include="XrmToolSuite.SolutionComplexityScore" Version="1.2026.7.12" />
<PackageReference Include="XrmToolSuite.SolutionComplexityScore" />
paket add XrmToolSuite.SolutionComplexityScore --version 1.2026.7.12
#r "nuget: XrmToolSuite.SolutionComplexityScore, 1.2026.7.12"
#:package XrmToolSuite.SolutionComplexityScore@1.2026.7.12
#addin nuget:?package=XrmToolSuite.SolutionComplexityScore&version=1.2026.7.12
#tool nuget:?package=XrmToolSuite.SolutionComplexityScore&version=1.2026.7.12
📊 Solution Complexity Score
An XrmToolBox plugin that inventories a single solution's components and computes a weighted 0–100 complexity score — with a maintainability score, upgrade/migration/testing effort in person-days, a rough annual support-cost estimate, and a sibling build-quality score — from the component tallies via a UI-free, SDK-free scoring engine. Read-only (counts components; never modifies the solution).
Features
| Area | What it produces |
|---|---|
| Component inventory | Tallies tables, columns, relationships, plugin steps, PCF controls, views, charts, JavaScript web resources, forms, dashboards, workflows, flows, business rules, custom APIs and apps (model-driven + canvas) into a plain ComponentCounts POCO — every query solution-scoped and fail-soft. The widest form (by control count) is captured as an outlier signal. |
| Complexity score | Each dimension contributes count × weight points (e.g. Table 3.0, Plugin step 2.5, PCF 3.0, Column 0.2); the total maps to a 0–100 score that saturates at 100 when points reach the max. Per-dimension contributions are exposed as rows. |
| Maintainability | MaintainabilityScore = 100 − ComplexityScore. |
| Effort & cost | Transparent linear estimates from the tallies — testing / upgrade / migration effort in person-days and a rough annual support-cost figure. |
| Build-quality score | A separate 0–100 score (higher = better, Low/Med/High band split at 80/60) that starts at 100 and deducts for best-practice violations over the same tallies (oversized forms, plugin-step density, automation sprawl, client-script weight, legacy-workflow reliance, schema sprawl, low maintainability). |
| Hotspots | Graded-severity findings — wide form (≥100 controls), high plugin-step count (≥30), large automation surface (≥40), heavy scripting (≥25 JS), large data model (≥50 tables). An unremarkable solution reads as "No structural hotspots". |
| Dashboard | A score + band header with a metric strip and a hotspot grid. |
Exports
- PDF (native, MigraDoc/PdfSharp-GDI)
- HTML dashboard
- Excel workbook
- JSON
- Markdown
- An executive summary — offline-templated by default, with an opt-in AI path
Help & Support
A right-aligned Help button on the toolbar opens a Help & Support dialog (Documentation, Report an
issue, and a support link, each opened in the browser). The tool implements IHelpPlugin and
IGitHubPlugin pointing at repository kkora/XrmToolSuite.
Build & install
This tool is not single-DLL — it ships the Excel/PDF export dependency chain (ClosedXML + PdfSharp/MigraDoc-GDI) into the Plugins root next to the tool DLL. The one-step build copies the whole chain automatically:
dotnet build src\Tools\XrmToolSuite.SolutionComplexityScore\XrmToolSuite.SolutionComplexityScore.csproj -c Release -p:DeployToXTB=true
Restart XrmToolBox and open Solution Complexity Score. For a manual copy to another machine, copy
every DLL from the tool's bin\Release\net48\ folder — flat in the Plugins root, never a subfolder,
or XrmToolBox silently drops the tool. See ./DEPLOYMENT.md and the suite guide
Deployment_Guide_XrmToolBox.md.
Usage
- Connect to your Dataverse environment.
- Open Solution Complexity Score and pick a solution (visible, non-system solutions load off-thread).
- Run the inventory — collection runs on a background worker with progress.
- Review the dashboard: complexity + maintainability + build-quality scores, effort/cost estimates, the metric strip and the hotspot grid.
- Export to PDF / HTML / Excel / JSON / Markdown.
Notes & limitations
- Read-only — no destructive operations, so no confirmation dialog is required.
- The complexity/effort model, the
ComponentCountsPOCO and the report projection are UI-free and SDK-free; the collector degrades query failures to zero counts rather than throwing. - The optional AI executive summary is opt-in behind a session-only API key (env var or the AI-settings dialog) that is never persisted, and a payload-preview consent dialog shows the anonymized JSON (no record data, credentials or environment names) before anything is sent. The chosen provider/model-id persist; the key does not.
- Local models (Ollama): run the summary against a local model — no API key, nothing leaves the machine.
- Install:
winget install Ollama.Ollama(or ollama.com/download). Ollama serveshttp://localhost:11434automatically; start it manually withollama serveif needed. - Pull a model:
ollama pull qwen2.5:7b(alsogemma3:4b,llama3.2:3b,qwen2.5-coder:7b).ollama listshows installed models,ollama psshows loaded ones,ollama run <model> "hi"warms one up. - AI settings ▸ Provider =
Ollama (local), Model =qwen2.5:7b, leave API key blank. The first request loads the model (waits up to 5 min); if Ollama isn't running it falls back to the offline summary.nomic-embed-textis an embedding model — use a chat model (qwen2.5/gemma3/llama3.2).
- Install:
- Deferred quality signals (naming-prefix consistency, description coverage, managed/unmanaged layering) need a collector change and are a phase-2 item.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET Framework | net48 is compatible. net481 was computed. |
-
- XrmToolBox (>= 1.2025.10.74)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 1.2026.7.12 | 117 | 7/11/2026 |
| 1.2026.7.11 | 82 | 7/11/2026 |
| 1.2026.7.10 | 104 | 7/11/2026 |
| 1.2026.7.9 | 116 | 7/11/2026 |
| 1.2026.7.8 | 101 | 7/11/2026 |
| 1.2026.7.7 | 107 | 7/11/2026 |
| 1.2026.7.6 | 107 | 7/10/2026 |
| 1.2026.7.5 | 105 | 7/9/2026 |
| 1.2026.7.3 | 102 | 7/7/2026 |
| 1.2026.7.2 | 104 | 7/5/2026 |
1.2026.7.12: The executive summary now renders with proper line breaks.