XrmToolSuite.EnvironmentInventory 1.2026.7.14

dotnet add package XrmToolSuite.EnvironmentInventory --version 1.2026.7.14
                    
NuGet\Install-Package XrmToolSuite.EnvironmentInventory -Version 1.2026.7.14
                    
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.EnvironmentInventory" Version="1.2026.7.14" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="XrmToolSuite.EnvironmentInventory" Version="1.2026.7.14" />
                    
Directory.Packages.props
<PackageReference Include="XrmToolSuite.EnvironmentInventory" />
                    
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.EnvironmentInventory --version 1.2026.7.14
                    
#r "nuget: XrmToolSuite.EnvironmentInventory, 1.2026.7.14"
                    
#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.EnvironmentInventory@1.2026.7.14
                    
#: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.EnvironmentInventory&version=1.2026.7.14
                    
Install as a Cake Addin
#tool nuget:?package=XrmToolSuite.EnvironmentInventory&version=1.2026.7.14
                    
Install as a Cake Tool

📋 Environment Inventory

An XrmToolBox plugin that collects a normalized, searchable inventory of a Dataverse environment — across metadata, solutions, security, automation, and web/dev components — with per-component detail and multi-format export. Read-only, and secret values are never read or exported.

Features

Each data source runs in its own fail-soft try/catch: a permission gap degrades to an "unavailable source" note rather than a hard error.

Category What it inventories
Metadata & solutions Solutions/publishers (managed state, version); tables via RetrieveAllEntitiesRequest with per-table column count and managed/custom state
Security Security roles, users, teams, business units (key attributes only — no credentials/secrets)
Automation Plugin assemblies + SDK steps; workflows/business rules/actions/BPFs/modern flows (by category, with state)
Web / dev Web resources, PCF custom controls (degrades if absent), custom APIs (type + managed state)
Configuration Environment-variable definitions (schema name, display name, declared type) and connection references (logical name, connector id) — never any value/secret column
  • Search & filter — a search box plus category and managed-state dropdowns drive the grid; filtering is client-side over the cached snapshot (InventorySnapshot.Filter), fast on large environments. Search is debounced (re-filters once typing pauses, not on every keystroke), and a "Filtering…" badge with a wait cursor appears over the grid while a filter/sort/re-bind runs so a large environment never looks hung.
  • Column sorting — click any column header to sort ascending, click again for descending (a sort glyph marks the active column). Sorting re-orders the cached model and re-binds the grid, so it stays responsive on 100k+ component environments — it deliberately does not use DataGridView's built-in unbound sort, which blocks the UI thread at that scale.
  • Detail panel — selecting a row shows its normalized fields plus the source-specific Details dictionary.

The normalization model (InventoryItem/InventorySnapshot), exporters, and summary projection are UI-free and SDK-free (unit-tested); the Dataverse collector is a separate file. Retrieval uses the shared RetrieveAll (paging + cancellation) off the UI thread with progress.

Exports

Exports reflect the current view — every format writes only the rows left by the active category/managed/search filter and in the current sort order, matching the grid (the status bar confirms the exported count, e.g. "Exported 163 component(s)"). Clear the filters to export the full inventory.

Excel, CSV, JSON, Markdown, HTML, Word, and PDF. CSV is RFC-4180 quoted; HTML is self-contained (inline CSS); the text formats carry a summary counts table; Excel produces the inventory grid (Summary + Items worksheets, no secret column) via ClosedXML. Word and PDF produce an inventory catalog — a title block, key-metric counts, and the records themselves grouped by category (Type / Name / Schema / Managed / Modified) — via the tool-local InventoryWordExporter (DocumentFormat.OpenXml from the ClosedXML chain) and InventoryPdfExporter (PdfSharp/MigraDoc-GDI). These deliberately do not use the suite's score/severity analyzer report template (an inventory is a catalog, not an assessment), so there is no risk gauge or severity grid. Export scope (selected sources) round-trips via settings.

Help & Support

A right-aligned Help button opens a Help & Support dialog with Documentation, Report an issue, and a support link, each opened in the browser. The tool implements IHelpPlugin and IGitHubPlugin, so XrmToolBox's own tool-menu links resolve to the same GitHub project (kkora/XrmToolSuite).

Build & install

This tool is not a single-DLL tool — it ships the Excel/PDF/Word export dependency chains (the ClosedXML + PdfSharp/MigraDoc-GDI DLLs; the Word exporter reuses the OpenXML assembly from the ClosedXML chain). The one-step build copies the whole chain into the XrmToolBox Plugins root for you:

dotnet build src\Tools\XrmToolSuite.EnvironmentInventory\XrmToolSuite.EnvironmentInventory.csproj -c Release -p:DeployToXTB=true

Then restart XrmToolBox and open Environment Inventory. 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. Full details in ./DEPLOYMENT.md and the suite guide Deployment_Guide_XrmToolBox.md.

Usage

  1. Connect to your environment (System Customizer or higher recommended).
  2. Load the inventory — sources are collected via RetrieveAll off the UI thread with progress and cancellation.
  3. Search and filter by category, name, and managed state; click a column header to sort (click again to reverse); select a row for its detail panel.
  4. Export in any of the supported formats.

Notes & limitations

  • Read-only; no secrets or credentials are ever persisted or exported — only environment-variable definitions and connection-reference metadata, never any value/secret column.
  • Unavailable sources (e.g. a permission gap, or a table absent from the environment) degrade to a noted "unavailable source" rather than aborting the run.
  • The normalization model is UI-free/SDK-free and unit-tested in testing/UnitTests/EnvironmentInventoryTests.cs.
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.14 153 7/20/2026
1.2026.7.13 101 7/11/2026
1.2026.7.10 97 7/11/2026
1.2026.7.9 95 7/11/2026
1.2026.7.8 101 7/11/2026
1.2026.7.7 106 7/11/2026
1.2026.7.6 107 7/10/2026
1.2026.7.5 102 7/9/2026
1.2026.7.3 93 7/7/2026
1.2026.7.2 95 7/5/2026

Click a column header to sort (no more freeze on large environments); debounced search with a "Filtering…" progress indicator; "Load inventory" button; exports now honour the active filter; Word/PDF exports are an inventory catalog (records grouped by category) instead of the score/severity report.