XrmToolSuite.TechnicalDebtAnalyzer 1.2026.7.12

dotnet add package XrmToolSuite.TechnicalDebtAnalyzer --version 1.2026.7.12
                    
NuGet\Install-Package XrmToolSuite.TechnicalDebtAnalyzer -Version 1.2026.7.12
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="XrmToolSuite.TechnicalDebtAnalyzer" Version="1.2026.7.12" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="XrmToolSuite.TechnicalDebtAnalyzer" Version="1.2026.7.12" />
                    
Directory.Packages.props
<PackageReference Include="XrmToolSuite.TechnicalDebtAnalyzer" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add XrmToolSuite.TechnicalDebtAnalyzer --version 1.2026.7.12
                    
#r "nuget: XrmToolSuite.TechnicalDebtAnalyzer, 1.2026.7.12"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package XrmToolSuite.TechnicalDebtAnalyzer@1.2026.7.12
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=XrmToolSuite.TechnicalDebtAnalyzer&version=1.2026.7.12
                    
Install as a Cake Addin
#tool nuget:?package=XrmToolSuite.TechnicalDebtAnalyzer&version=1.2026.7.12
                    
Install as a Cake Tool

๐Ÿงน Technical Debt Analyzer

An XrmToolBox plugin that scans a connected Dataverse environment with eight UI-free analyzers, scores the accumulated technical debt on a 0โ€“100 scale with a Low/Medium/High band, and lists prioritized cleanup findings in a severity-coloured grid. Read-only โ€” it queries metadata, plugin registration, web resources, processes and roles, and never modifies anything.

Features

The eight analyzers cover the main debt sources; each degrades a failed query or permission gap to an informational finding rather than aborting the scan.

Analyzer What it flags
Unused metadata Custom tables with 0 rows (Medium); very wide custom tables (โ‰ฅ 200 custom columns, Low)
Duplicate artifacts Web resources that share a display name (Low)
Deprecated API JS web resources referencing Xrm.Page, crmForm, the 2011 /Organization.svc endpoint, getServerUrl or XMLHttpRequest (Medium)
Orphaned components Draft processes never activated (Low)
Dead plugins Disabled steps (Low), plugin types with no steps (Low), assemblies with no stepped type (Medium)
Performance Active steps on RetrieveMultiple (High); synchronous Update steps with no filtering attributes (Medium)
Naming violations Default new_ publisher prefixes on tables/columns (Low); undocumented custom tables (Info)
Security "Copy of โ€ฆ" roles (Low); secured-column sprawl (Info)
  • Debt score: severities are weighted (Critical=25 / High=12 / Medium=5 / Low=2 / Info=0), summed and capped at 100, and banded at 15 (Medium) / 40 (High). Debt accumulates โ€” a single Critical does not force the High band.
  • Dashboard: a score + band header, a headline metric strip (total findings plus a per-category breakdown), and a detail pane per finding (component, description, recommendation, docs link).
  • Trends tab: charts the debt score run-over-run per environment from local per-machine JSON snapshots (a dependency-free GDI line chart, a "since last run" delta banner, and a confirmation-gated Clear history action). Trend history is local only โ€” the tool never writes to the org.

Exports

  • Excel workbook
  • PDF report (native, MigraDoc/PdfSharp-GDI)
  • HTML dashboard
  • JSON
  • Markdown cleanup checklist
  • An executive summary โ€” offline-templated by default, with an auditable, opt-in AI path
  • The Trends tab additionally exports the snapshot series to CSV/JSON

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, so XrmToolBox's own tool-menu links resolve to the same project.

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.TechnicalDebtAnalyzer\XrmToolSuite.TechnicalDebtAnalyzer.csproj -c Release -p:DeployToXTB=true

Restart XrmToolBox and open Technical Debt Analyzer. 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

  1. Connect to your Dataverse environment.
  2. Open Technical Debt Analyzer; tick which analyzers to run (the unchecked set persists).
  3. Run the scan โ€” analysis runs on a background worker with progress and cancellation.
  4. Review the severity-coloured findings grid and the dashboard; click a finding for its detail pane.
  5. Export to Excel / PDF / HTML / JSON / Markdown, and open the Trends tab to see the score over time.

Notes & limitations

  • Read-only โ€” never modifies the environment. Trend history is stored as local per-machine JSON under the XrmToolBox Settings folder (capped to the most recent 100 runs per environment); Clear history is confirmation-gated.
  • Per-entity row probing is capped (400 by default); the cap is reported as an Info finding when hit.
  • The optional AI executive summary is opt-in behind a session-only API key that is never persisted, and a payload-preview consent dialog shows the anonymized JSON before anything is sent. Component names in the payload are toggleable.
  • Local models (Ollama): run the summary against a local model โ€” no API key, nothing leaves the machine.
    1. Install: winget install Ollama.Ollama (or ollama.com/download). Ollama serves http://localhost:11434 automatically; start it manually with ollama serve if needed.
    2. Pull a model: ollama pull qwen2.5:7b (also gemma3:4b, llama3.2:3b, qwen2.5-coder:7b). ollama list shows installed models, ollama ps shows loaded ones, ollama run <model> "hi" warms one up.
    3. 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-text is an embedding model โ€” use a chat model (qwen2.5/gemma3/llama3.2).
  • System Customizer or higher is recommended for full results.
Product Compatible and additional computed target framework versions.
.NET Framework net48 is compatible.  net481 was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

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 128 7/11/2026
1.2026.7.11 95 7/11/2026
1.2026.7.10 100 7/11/2026
1.2026.7.9 105 7/11/2026
1.2026.7.8 111 7/11/2026
1.2026.7.7 99 7/11/2026
1.2026.7.6 107 7/10/2026
1.2026.7.5 103 7/9/2026
1.2026.7.3 103 7/7/2026
1.2026.7.2 105 7/5/2026

1.2026.7.12: The executive summary now renders with proper line breaks.