System.Environment.FailFast with ReadyToRun
Aplikacja .NET ulega awarii w momencie, gdy po raz pierwszy dotyka klasy IronPDF, kończąc działanie przez System.Environment.FailFast przy uruchamianiu lub we wczesnej fazie inicjalizacji. Gdy aplikacja jest publikowana z kompilacją ReadyToRun (R2R), to kroki podejmowane z wyprzedzeniem zwykle są przyczyną. Pozostawiasz ReadyToRun dla aplikacji i wykluczasz z niego 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 kompiluje zestawy z wyprzedzeniem, aby przyspieszyć start. W niektórych środowiskach ten krok z wyprzedzeniem zakłóca działania bibliotek, które polegają na zachowaniu inicjalizacji w czasie wykonania, w tym IronPDF. Proces może się nie udać bardzo wcześnie, często zanim jakiekolwiek logi IronPDF są dostępne, dlatego przed awarią nie są zapisywane żadne logi.
Ten problem pojawia się tylko w wdrożonym środowisku, zazwyczaj w aplikacjach ASP.NET Core lub hostowanych na IIS na Windows (w tym Windows Server) celujących w win-x64. Ta sama maszyna może zachowywać się różnie wewnątrz IIS niż na zewnątrz. Potwierdzony przypadek produkcyjny uruchomił IronPDF 2026.4.1 na .NET 10, w aplikacji webowej ASP.NET Core pod IIS (w3wp.exe) na Windows Server 2025 Datacenter na AWS EC2.
Rozwiązanie
1. Zachowaj włączone ReadyToRun
Nie ma potrzeby całkowitego wyłączania ReadyToRun. Jeśli twoja aplikacja na nim polega, pozostaw właściwość w miejscu:
<PropertyGroup>
<PublishReadyToRun>true</PublishReadyToRun>
</PropertyGroup>
<PropertyGroup>
<PublishReadyToRun>true</PublishReadyToRun>
</PropertyGroup>
2. Wyklucz IronPdf.dll z kompilacji ReadyToRun
Dodaj wykluczenie do swojego .csproj:
<ItemGroup>
<PublishReadyToRunExclude Include="IronPdf.dll" />
</ItemGroup>
<ItemGroup>
<PublishReadyToRunExclude Include="IronPdf.dll" />
</ItemGroup>
Ta pojedyncza linia przywraca normalne zachowanie: pozostawia resztę aplikacji z kompilacją R2R, a jednocześnie pozwala na inicjalizację IronPDF w czasie wykonywania, jak się spodziewa.
<PublishReadyToRunExclude>.3. Pełny przykład .csproj
Plik projektu wygląda w ten sposób:
<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>
4. Opublikuj i wdroż ponownie
Po zaktualizowaniu pliku projektu, wykonaj nową kompilację:
- Przebuduj aplikację.
- Ponownie opublikuj ją dla zamierzonego środowiska wykonawczego, na przykład
win-x64. - Wdróż zaktualizowaną kompilację.
- Uruchom ponownie witrynę IIS lub zresetuj pulę aplikacji.
- Przetestuj ponownie ten sam kod IronPDF.
W potwierdzonym przypadku produkcyjnym, wykluczenie IronPdf.dll z kompilacji ReadyToRun wyeliminowało awarię System.Environment.FailFast i aplikacja działała normalnie pod IIS.
Kiedy wypróbować tę poprawkę
Sięgnij po to, gdy objawy się zgadzają:
PublishReadyToRun=true: ReadyToRun jest włączone w opublikowanej aplikacji.- Awaria przy pierwszym wywołaniu: awaria występuje w momencie, gdy dotknięty zostanie klasa IronPDF.
- Timing uruchamiania: błąd pojawia się podczas uruchamiania lub wczesnej statycznej inicjalizacji.
- Wdrożone hosty Windows: aplikacja działa pod IIS lub innym wdrożonym środowiskiem Windows.
Dla pełnego przewodnika, zobacz Korzystanie z ReadyToRun z IronPDF.

