Excepciones de Inicio del Servicio de Windows en .NET Framework 4.8
Un proyecto de servicio de Windows de IronPDF .NET Framework 4.8 arroja FileNotFoundException al construir ChromePdfRenderer, o StackOverflowException al configurar la clave de licencia. El mismo código funciona correctamente en un host de consola o WinForms.
La lógica de detección de fachada de MSBuild impide que se copien seis ensamblados suministrados por NuGet al directorio de salida: System.ValueTuple, System.Buffers, System.Threading.Tasks.Extensions, System.Text.Json, System.Text.Encodings.Web, y System.Text.Encoding.CodePages. MSBuild asume que las versiones en caja de .NET 4.8 de estos ensamblados son equivalentes a las versiones NuGet, pero las redirecciones de enlace en App.config requieren las versiones NuGet. Los archivos faltantes causan la excepción al inicio.
Solución
Option 1: Migrate to PackageReference (Recommended)
Haga clic derecho en packages.config en Visual Studio y seleccione Migrar packages.config a PackageReference. Verifique que <AutoGenerateBindingRedirects> esté habilitado en el archivo .csproj, luego reconstruya. La integración de MSBuild de PackageReference no desencadena el comportamiento de omitir fachada.
Opción 2: Forzar la copia de DLL de fachada con un objetivo AfterBuild
Si es necesario retener packages.config, agregue este objetivo de MSBuild al archivo .csproj:
<Target Name="CopyFacadeAssemblies" AfterTargets="Build">
<ItemGroup>
<FacadeAssemblies Include="..\packages\System.Buffers.4.5.1\lib\netstandard2.0\System.Buffers.dll" />
<FacadeAssemblies Include="..\packages\System.Text.Encodings.Web.6.0.1\lib\net461\System.Text.Encodings.Web.dll" />
<FacadeAssemblies Include="..\packages\System.Text.Json.6.0.11\lib\net461\System.Text.Json.dll" />
<FacadeAssemblies Include="..\packages\System.Text.Encoding.CodePages.5.0.0\lib\net461\System.Text.Encoding.CodePages.dll" />
<FacadeAssemblies Include="..\packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll" />
<FacadeAssemblies Include="..\packages\System.ValueTuple.4.5.0\lib\net47\System.ValueTuple.dll" />
</ItemGroup>
<Copy SourceFiles="@(FacadeAssemblies)" DestinationFolder="$(OutputPath)" SkipUnchangedFiles="true" />
</Target>
<Target Name="CopyFacadeAssemblies" AfterTargets="Build">
<ItemGroup>
<FacadeAssemblies Include="..\packages\System.Buffers.4.5.1\lib\netstandard2.0\System.Buffers.dll" />
<FacadeAssemblies Include="..\packages\System.Text.Encodings.Web.6.0.1\lib\net461\System.Text.Encodings.Web.dll" />
<FacadeAssemblies Include="..\packages\System.Text.Json.6.0.11\lib\net461\System.Text.Json.dll" />
<FacadeAssemblies Include="..\packages\System.Text.Encoding.CodePages.5.0.0\lib\net461\System.Text.Encoding.CodePages.dll" />
<FacadeAssemblies Include="..\packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll" />
<FacadeAssemblies Include="..\packages\System.ValueTuple.4.5.0\lib\net47\System.ValueTuple.dll" />
</ItemGroup>
<Copy SourceFiles="@(FacadeAssemblies)" DestinationFolder="$(OutputPath)" SkipUnchangedFiles="true" />
</Target>
Ajuste los números de versión para que coincidan con las versiones exactas restauradas en su directorio packages.
Configurar <Private>True</Private> (Copy Local) en referencias de fachada no resuelve el problema; La detección de fachada de MSBuild aún bloquea el paso de copia.

