One toolkit.
Pick your layers.
Every .NET project ends up rewriting the same code: safe conversion, string and date helpers, retry loops, data plumbing, mapping. Transformations is that code, split into packages you can install one at a time, so a project only takes what it uses.
Take only what you need.
Install the full package when you want the everyday toolkit, or reference individual layers to keep each project lean. Mapping, Documents and Audio each have their own page, and so do resilience, untrusted-input handling, and dates and utilities, which come from Core, Data, Dapper and EntityFramework.
All-in-one
The meta-package for application projects that want the everyday toolkit in one install: the core helpers, Dapper and EF Core wrappers, the mapping generator and the deprecation analyzer.
Foundation
Safe type conversion, strings, collections, dates and holidays, batching, retry with backoff and diagnostics. The helpers you want without dragging in an application stack.
brings in: no packages
Data access
DataRow, DataReader and DataTable helpers, SQL parameter builders and CSV export, without DBNull surprises.
brings in: Microsoft.Data.SqlClient
Resilient Dapper
Retry-wrapped Dapper queries with transient SQL fault detection: deadlocks, timeouts and Azure SQL throttling are retried, everything else fails fast.
brings in: Dapper, Microsoft.Data.SqlClient
EF Core helpers
Resilient SaveChanges, change-tracker audit entries and queryable CSV export.
brings in: Microsoft.EntityFrameworkCore
ASP.NET Core
Configuration, session, cookie and query-string helpers, plus SelectList extensions for MVC views. Kept separate so Core stays usable outside a web app.
brings in: Microsoft.Extensions.Configuration
Object mapper
A Roslyn source generator: compile-time, zero-reflection, NativeAOT-ready mapping methods with build-time diagnostics for unmapped members.
brings in: nothing at runtime (a generator)
Text extraction
Multi-format text extraction and chunking for RAG pipelines: PDF, DOCX, PPTX, EPUB, RTF, HTML, Markdown and more, with per-chunk provenance.
brings in: PdfPig, Open XML, Markdig and other parsers
Audio toolkit
Resampling, cleanup, filtering, level analysis, PCM conversion and WAV IO, backed by repeatable fidelity reports.
brings in: NAudio
The layering rule: Core and Data have no ASP.NET dependency, and Core has no package dependencies at all. Web is the only layer that pulls in the web stack, which is why it is a separate package. The analyzer and the mapping generator ship inside the all-in-one package, so installing it is enough to get deprecation warnings and generated mappers.
Evidence before adjectives.
Where a claim can be checked, here is what backs it: test counts taken from the current code, the gates that run in CI, and a deprecation policy enforced by an analyzer rather than a wiki page.
Tests
Counted by running every suite on the current code. The Audio suite also runs on .NET 8 and 9 and is counted once here.
| Core, Data, Web, Text and helpers | 1,980 |
| Audio | 207 |
| Mapping | 53 |
| Dapper | 34 |
| EntityFramework | 20 |
| Analyzers | 6 |
| Total | 2,300 |
Gates in CI
A GitHub Actions workflow builds the solution and runs the core suite with coverage. It fails when any of these slip:
- Coverage floors of 65% lines and 55% branches, read from a Cobertura report.
- Public-method policy: every public method in the type-conversion, collection-conversion and holiday modules must have a test that names it.
- Known gaps are written down: a baseline file lists the 167 public members that currently lack tests, so the gap is visible rather than hidden.
- XML docs are built and published as an artifact on every run.
A deprecation policy with teeth
Old APIs are never deleted without warning. They move through three releases:
[Obsolete] with replacement guidance. Warnings only.DeprecationErrorLevel is on.The policy is written down in DEPRECATION_POLICY.md in the repository.
An analyzer that migrates for you
Diagnostic TX0001 flags a deprecated call as you type, and a code fix applies the straightforward renames in one click.
warning TX0001: 'GetEnumDescription3' is deprecated use 'GetDescription' instead // before var text = status.GetEnumDescription3(); // after the code fix var text = status.GetDescription();
What this does not claim. CI runs the core suite, not all six, and the coverage
floors are floors rather than targets. Some deprecated calls, such as IsBetween, are flagged
without an automatic fix because the replacement needs a choice. And the 167-member baseline is a to-do
list, not a certificate.