Excepciones de Inicio del Servicio de Windows en .NET Framework 4.8

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

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

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>
XML

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.

Curtis Chau
Escritor Técnico

Curtis Chau tiene una licenciatura en Ciencias de la Computación (Carleton University) y se especializa en el desarrollo front-end con experiencia en Node.js, TypeScript, JavaScript y React. Apasionado por crear interfaces de usuario intuitivas y estéticamente agradables, disfruta trabajando con frameworks modernos y creando manuales bien ...

Leer más
¿Listo para empezar?
Nuget Descargas 20,088,359 | Versión: 2026.7 recién publicada
Still Scrolling Icon

¿Aún desplazándote?

¿Quieres una prueba rápida? PM > Install-Package IronPdf
ejecutar una muestra Mira cómo tu HTML se convierte en PDF.