The Transformations family · modular .NET packages

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.

✓ Install a single layer ✓ MIT licensed ✓ .NET 8, 9, and 10
packages://transformations modular
ADD only the layers you need
Foundation
Core
Data
DataDapperEntityFramework
Web
Web
Standalone
MappingTextAudio
Tooling
Analyzers
9NuGet packages, from one all-in-one install to single layers
2,300automated tests across six suites, counted on the current code
3target frameworks for the libraries: .NET 8, 9 and 10
0package dependencies in Core, the foundation layer
The package map

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.

Transformations.Core

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

Transformations.Data

Data access

DataRow, DataReader and DataTable helpers, SQL parameter builders and CSV export, without DBNull surprises.

brings in: Microsoft.Data.SqlClient

Transformations.Dapper

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

Transformations.EntityFramework

EF Core helpers

Resilient SaveChanges, change-tracker audit entries and queryable CSV export.

brings in: Microsoft.EntityFrameworkCore

Transformations.Web

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

web layer only
Transformations.Mapping

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)

compile-timeMapping →
Transformations.Text

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

RAG · chunkingDocuments →
Transformations.Audio

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.

How it’s built

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 helpers1,980
Audio207
Mapping53
Dapper34
EntityFramework20
Analyzers6
Total2,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:

2.0.0Marked [Obsolete] with replacement guidance. Warnings only.
2.1.0Obsolete usage becomes a build error when DeprecationErrorLevel is on.
2.2.0Deprecated APIs are removed.

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.

Transformations

Install once.
Or one layer at a time.

NuGet — start with the everyday toolkit
$ dotnet add package Transformations
$ dotnet add package Transformations.Core
View on NuGet.org .NET 8 · .NET 9 · .NET 10 · MIT licensed