IRONSOFTWAREHOME

Managed Code After Thread State Destroyed on .NET 9 and .NET 10

Curtis Chau
Curtis Chau
Updated: June 10, 2026

On .NET 9.0.5 and later (including .NET 10), an application using IronPDF exits with a fatal assertion error and exit code 127.

Attempt to execute managed code after the .NET runtime thread state has been destroyed.
Text

Microsoft introduced stricter FLS (Fiber Local Storage) thread cleanup in .NET 9.0.5. The OS controls the ordering of FLS callback execution, which can trigger CLR teardown before IronPDF's Chrome renderer finishes its own shutdown sequence. This issue is Windows-specific; Linux and macOS are not affected. .NET 6, 7, and 8 exit cleanly. IronPDF's PDF generation completes successfully before the assertion fires. Microsoft has filed the issue as "Future" with no planned fix date.

Options

.NET 6.0.36 and .NET 8.0.26 exit cleanly. Downgrade the target framework if clean process exit is required.

Option 2: Use test result files instead of exit codes in CI/CD

The PDF work completes successfully before the assertion fires. Publish test results from result files rather than relying on exit code:

Azure DevOps:

- script: dotnet test --logger "trx" || true
- task: PublishTestResults@2
  inputs:
    testResultsFiles: '**/*.trx'
Text

GitHub Actions:

- run: dotnet test --logger "trx" || true
- uses: dorny/test-reporter@v1
  with:
    path: '**/*.trx'
    reporter: dotnet-trx
Text

Option 3: Filter exit code in shell

dotnet run 2>stderr.log; EXIT=$?
if grep -q "thread state has been destroyed" stderr.log; then exit 0; else exit $EXIT; fi
SHELL

Known non-working mitigations: Installation.SkipShutdown = true, SetErrorMode, Environment.Exit(0), and manual GC collection before exit.

Curtis Chau
Technical Writer

Curtis Chau holds a Bachelor’s degree in Computer Science (Carleton University) and specializes in front-end development with expertise in Node.js, TypeScript, JavaScript, and React. Passionate about crafting intuitive and aesthetically pleasing user interfaces, Curtis enjoys working with modern frameworks and creating well-structured, visually appealing manuals.

...
Read More

Ready to Get Started?

Nuget Downloads 20,878,335Version:2026.9just released

Get your free 30-day Trial Key instantly.
No credit card or account creation required
C# NuGet Library for PDF
Install with NuGet

Version: 2026.9

PM > Install-Package IronPdf
nuget.org/packages/IronPdf/
  1. In Solution Explorer, right-click References, Manage NuGet Packages
  2. Select Browse and search "IronPdf"
  3. Select the package and install
C# PDF DLL
Download DLL

Version: 2026.9

or download Windows Installer here.

  1. Download and unzip IronPDF to a location such as ~/Libs within your Solution directory
  2. In Visual Studio Solution Explorer, right click References. Select Browse, "IronPdf.dll"

Licenses from $999

Key in blue circle

Get your free 30-day Trial Key instantly.

Your trial license will be sent to your email address

No limitations. 100% unlocked. No credit card.

bullet_checkedNo credit card or account creation requiredNo limitations. 100% unlocked. No credit card.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Book your free Live Demo
Booking Badge

Trusted by Millions of Engineers Worldwide

Iron Software's customer logos
Get Your No-Obligation Consult
Complete the form below or email sales@ironsoftware.com
Your details will always be kept confidential.
Trusted by Millions of Engineers Worldwide
Iron Software's customer logos
Get your free 30-day Trial Key instantly.
No credit card or account creation required