Thread Durumu Yok Edildikten Sonra Yönetilen Kod .NET 9 ve .NET 10

This article was translated from English: Does it need improvement?
Translated
View the article in English

.NET 9.0.5 ve sonrasında ( .NET 10 dahil) IronPDF kullanan bir uygulama, ölümcül bir doğrulama hatası ve çıkış kodu 127 ile çıkış yapar.

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

Microsoft, .NET 9.0.5'te daha katı FLS (Fiber Local Storage) thread temizliği tanıttı. İşletim sistemi FLS geri çağırma yürütme sıralamasını kontrol eder; bu da IronPDF'nin Chrome renderlayıcısı kendi kapanış dizisini tamamlamadan önce CLR sökümünü tetikleyebilir. Bu sorun Windows'a özgüdür; Linux ve macOS etkilenmez. .NET 6, 7 ve 8 temiz bir şekilde çıkar. IronPDF'nin PDF oluşturulması, doğrulama başlamadan önce başarıyla tamamlanır. Microsoft, sorunu "Gelecek" olarak dosyalamış olup planlı bir düzeltme tarihi yoktur.

Seçenekler

Seçenek 1: .NET 8'e Düşürme (Önerilen)

.NET 6.0.36 ve .NET 8.0.26 temiz bir şekilde çıkar. Temiz bir işlem çıkışı gerekiyorsa hedef framework'ü düşürün.

Seçenek 2: CI/CD'de çıkış kodları yerine test sonucu dosyalarını kullanın

Doğrulama başlamadan önce PDF işi başarıyla tamamlanır. Çıkış koduna güvenmek yerine sonuç dosyalarından test sonuçları yayınlayın:

Azure DevOps:

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

GitHub Actions:

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

Seçenek 3: Shell'de çıkış kodunu filtreleyin

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

Bilinen çalışmayan önlemler: Installation.SkipShutdown = true, SetErrorMode, Environment.Exit(0) ve çıkıştan önce manuel GC toplama.

Curtis Chau
Teknik Yazar

Curtis Chau, Bilgisayar Bilimleri alanında Lisans Derecesine (Carleton Üniversitesi) sahip ve Node.js, TypeScript, JavaScript ve React konularında uzmanlaşmış ön uç geliştirmeyle ilgileniyor. Sezgisel ve estetik açıdan hoş kullanıcı arayüzleri oluşturma tutkunu, Curtis modern çerçevelerle çalışmayı ve iyi yapı...

Daha Fazla Oku
Başlamaya Hazır mısınız?
Nuget İndirmeler 20,088,359 | Sürüm: 2026.7 yeni yayınlandı
Still Scrolling Icon

Hâlâ Kaydırıyor Musunuz?

Hızlıca kanıt ister misiniz? PM > Install-Package IronPdf
bir örnek çalıştır HTML'nizi bir PDF'ye dönüştüğünü izleyin.