System.Environment.FailFast with ReadyToRun

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

.NET 應用程式在首次接觸 IronPDF 類別時崩潰,並在啟動時或初始化早期通過 System.Environment.FailFast 終止。 當應用程式使用 ReadyToRun (R2R) 編譯發佈時,該超前步驟通常是原因。 您將應用程式的 ReadyToRun 保持開啟,並從中排除 IronPdf.dll

The application requested process termination through System.Environment.FailFast. Message: Stack: at System.Environment.FailFast(System.String) at <Module>..cctor() at Program.<Main>$(System.String[])

ReadyToRun 會提前編譯程式集以加快啟動速度。在某些環境中,該提前步驟會干擾依賴於運行時初始化行為的程式庫,其中包括 IronPDF。 過程可能在非常早期失敗,通常是在任何 IronPDF 記錄可用之前,因此在崩潰前沒有寫入日誌。

此問題僅在部署的環境中顯示,通常是在 Windows(包括 Windows Server)上針對 win-x64 的 ASP.NET Core 或 IIS 託管應用中。 同一台機器在 IIS 內時可能會表現不同於在外部。 一個已確認的生產案例在 AWS EC2 上的 Windows Server 2025 Datacenter 上運行於 .NET 10 的 IronPDF 2026.4.1,一個在 IIS 上的 ASP.NET Core 網頁應用 (w3wp.exe)。

解決方案

1. 保持啟用 ReadyToRun

無需完全禁用 ReadyToRun。 如果您的應用程式依賴於它,保留該屬性:

<PropertyGroup>
  <PublishReadyToRun>true</PublishReadyToRun>
</PropertyGroup>
<PropertyGroup>
  <PublishReadyToRun>true</PublishReadyToRun>
</PropertyGroup>
XML

2. 從 ReadyToRun 編譯中排除 IronPdf.dll

將排除項新增到您的 .csproj

<ItemGroup>
  <PublishReadyToRunExclude Include="IronPdf.dll" />
</ItemGroup>
<ItemGroup>
  <PublishReadyToRunExclude Include="IronPdf.dll" />
</ItemGroup>
XML

這一行單獨恢復了正常行為:它讓其他應用程式保持 R2R 編譯,同時讓 IronPDF 在運行時初始化符合其預期。

小心使用所示的準確語法。 不要將排除項包裹在另一個 <PublishReadyToRunExclude> 容器中。

3. 完整的 .csproj 範例

一個工作項目檔案看起來像這樣:

<PropertyGroup>
  <TargetFramework>net10.0</TargetFramework>
  <Nullable>enable</Nullable>
  <ImplicitUsings>enable</ImplicitUsings>
  <PublishReadyToRun>true</PublishReadyToRun>
</PropertyGroup>
<ItemGroup>
  <PackageReference Include="IronPdf" Version="2026.4.1" />
</ItemGroup>
<ItemGroup>
  <PublishReadyToRunExclude Include="IronPdf.dll" />
</ItemGroup>
<PropertyGroup>
  <TargetFramework>net10.0</TargetFramework>
  <Nullable>enable</Nullable>
  <ImplicitUsings>enable</ImplicitUsings>
  <PublishReadyToRun>true</PublishReadyToRun>
</PropertyGroup>
<ItemGroup>
  <PackageReference Include="IronPdf" Version="2026.4.1" />
</ItemGroup>
<ItemGroup>
  <PublishReadyToRunExclude Include="IronPdf.dll" />
</ItemGroup>
XML

4. 重新發布並重新部署

隨著項目檔案更新,推送一個最新的構建:

  1. 重新構建應用程式。
  2. 重新發布為您預期的運行時,例如 win-x64
  3. 重新部署更新的構建。
  4. 重新啟動 IIS 站點或回收應用程式池。
  5. 再次測試相同的 IronPDF 程式碼路徑。

在確認的生產案例中,從 ReadyToRun 編譯中排除 IronPdf.dll 消除了 System.Environment.FailFast 崩潰,應用程式在 IIS 下正常運行。

何時嘗試此修復

當症狀一致時請採用此方法:

  • PublishReadyToRun=true: 發佈的應用已啟用 ReadyToRun。
  • 首次呼叫崩潰: 當 IronPDF 類別被接觸時立即發生錯誤。
  • 啟動時機: 錯誤出現在啟動或早期靜態初始化期間。
  • 部署的 Windows 主機: 應用程式運行在 IIS 或其他部署 Windows 環境下。

有關完整指南,請參見 使用 ReadyToRun 與 IronPDF

Curtis Chau
技術作家

Curtis Chau擁有Carleton大學的電腦科學學士學位,專精於前端開發,擁有Node.js、TypeScript、JavaScript和React的專業知識。Curtis熱衷於建立直觀且美觀的使用者介面,喜愛使用現代框架並建立結構良好、視覺吸引力的手冊。

除了開發,Curtis對物聯網(IoT)有濃厚的興趣,探索創新的方法來整合硬體和軟體。在空閒時間,他喜歡玩遊戲和建立Discord機器人,結合他對技術的熱愛與創造力。

準備開始了嗎?
Nuget 下載 20,296,129 | 版本: 2026.7 剛剛發布
Still Scrolling Icon

還在捲動嗎?

想快速獲得證明嗎? PM > Install-Package IronPdf
執行範例 看您的HTML變成PDF。