Skip to content

Trim and Native AOT compatibility - #431

Merged
mysticmind merged 3 commits into
masterfrom
feature/aot-compat
Jul 7, 2026
Merged

Trim and Native AOT compatibility#431
mysticmind merged 3 commits into
masterfrom
feature/aot-compat

Conversation

@mysticmind

Copy link
Copy Markdown
Owner

Makes ReverseMarkdown trim- and Native AOT-safe.

Changes

  • Enable IsAotCompatible on net8/9/10 (netstandard2.0 excluded).
  • Keep the default conversion path reflection-free; annotate the only reflection path ([MarkdownReader] assembly scanning) with [RequiresUnreferencedCode] / [RequiresDynamicCode].
  • Add Converter.RegisterReader(tag, reader) - an AOT-safe way to add custom readers, no scanning.
  • Add an AOT smoke app + CI job that fails on any trim/AOT warning.
  • Document trimming/AOT in the README and docs.
  • Bump version to 6.1.0.

Make the library trim/AOT-safe and prove it in CI.

- Enable IsAotCompatible on the modern TFMs (trim/AOT analyzers; netstandard2.0
  excluded as it cannot AOT).
- Isolate the only reflection path (assembly-scanning reader discovery): the
  default Converter/MarkdownDomReader constructors no longer touch it, and the
  assembly-scanning overloads + RegisterFromAssemblies are annotated
  [RequiresUnreferencedCode]/[RequiresDynamicCode].
- Add Converter.RegisterReader(tag, reader): an AOT-safe way to add custom
  readers without [MarkdownReader] assembly scanning. Covered by tests.
- Add tools/ReverseMarkdown.AotSmoke, published with PublishAot, and a CI job
  that fails on any IL2xxx/IL3xxx warning then runs the native binary.
- Document trimming/AOT and RegisterReader in the extending guide.

Verified locally: Native AOT publish produces a working binary with zero
trim/AOT warnings (AngleSharp included); full test suite passes.
Add AOT compatibility to the README features and the docs (introduction
highlights + a Trimming and Native AOT section on the Supported Frameworks
page). Bump VersionPrefix 6.0.0 -> 6.1.0 for the RegisterReader API and AOT
support.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant