Exceções de Inicialização de Serviço Windows do .NET Framework 4.8
Um projeto de Serviço Windows IronPDF .NET Framework 4.8 lança FileNotFoundException ao construir ChromePdfRenderer, ou StackOverflowException ao definir a chave de licença. O mesmo código funciona corretamente em um host de console ou WinForms.
A lógica de detecção de fachada do MSBuild impede que seis assemblies fornecidos pelo NuGet sejam copiados para o diretório de saída: System.ValueTuple, System.Buffers, System.Threading.Tasks.Extensions, System.Text.Json, System.Text.Encodings.Web e System.Text.Encoding.CodePages. O MSBuild assume que as versões embutidas do .NET 4.8 desses assemblies são equivalentes às versões do NuGet, mas os redirecionamentos de vinculação em App.config requerem as versões do NuGet. Os arquivos ausentes causam a exceção na inicialização.
Solução
Opção 1: Migrar para PackageReference (Recomendado)
Clique com o botão direito em packages.config no Visual Studio e selecione Migrar packages.config para PackageReference. Verifique se <AutoGenerateBindingRedirects> está ativado no arquivo .csproj, depois reconstrua. A integração do MSBuild do PackageReference não aciona o comportamento de pular fachadas.
Opção 2: Forçar cópia de DLL de fachada com um alvo AfterBuild
Se for necessário manter packages.config, adicione este alvo MSBuild ao arquivo .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 os números das versões para corresponder às versões exatas restauradas no seu diretório packages.
Definir <Private>True</Private> (Cópia Local) em referências de fachada não resolve o problema; A detecção de fachadas do MSBuild ainda bloqueia a etapa de cópia.

