WithOptions(...) in the fluent API now returns IConversionHandlersStage (or IConversionByPageHandlersStage for page-by-page conversion). Chained calls such as .WithOptions(...).OnConversionCompleted(...).OnConversionFailed(...).Convert() compile unchanged; only code that stores an intermediate result in a variable of one of the removed interface types needs the new type.
On .NET 6 and later, the exception classes in GroupDocs.Conversion.Exceptions no longer declare the legacy serialization constructor (SerializationInfo, StreamingContext) or override GetObjectData; on .NET Framework they are unchanged. This only affects code that derives from these exception types and calls the serialization constructor.
Migrating to ConversionEvents (v26.6)
Version 26.6 introduces the ConversionEvents aggregator — a single typed object that replaces three previously separate registration paths: the per-handler properties on ConverterSettings, the IConverterListener assigned to ConverterSettings.Listener, and the fluent chain methods placed after WithOptions(...) or Compress(...). The obsolete surfaces are removed in version 26.9 — see Migrating to v26.9.
Per-result events were renamed at the same time — the noun moved from “Conversion” to “Document” or “Page” so the pipeline-lifecycle group could reuse “Conversion”:
Old name
New name
OnConversionCompleted (per-document)
OnDocumentConverted
OnConversionFailed (per-document)
OnDocumentFailed
OnConversionByPageCompleted
OnPageConverted
OnConversionByPageFailed
OnPageFailed
OnCompressionCompleted
(unchanged)
The OnConversionCompleted name is reused for the new lifecycle event (Action, no parameters, fires once at pipeline end). The old per-document variant is now OnDocumentConverted.
Classic API
Before — handlers were set as individual properties on ConverterSettings:
ConverterSettings.Listener and the IConverterListener interface were obsolete from v26.6 and are removed in v26.9.
Per-call vs global precedence
Handlers registered through ConversionEvents are global and fire on every Convert(...) call. The Convert(...) overloads that accept an Action<ConvertedContext> register a per-call handler that wins over the global OnDocumentConverted for that single call only — the precedence rule is (perCall ?? global)?.Invoke(...). Between consecutive runs on the same converter, only the per-call slot is reset; the global events bag is preserved.