Exceptions de démarrage du service Windows .NET Framework 4.8
Un projet IronPDF .NET Framework 4.8 Windows Service génère FileNotFoundException lors de la construction de ChromePdfRenderer, ou StackOverflowException lors de la configuration de la clé de licence. Le même code fonctionne correctement dans une console ou un hôte WinForms.
La logique de détection de façade de MSBuild empêche six assemblages fournis par NuGet d'être copiés dans le répertoire de sortie : System.ValueTuple, System.Buffers, System.Threading.Tasks.Extensions, System.Text.Json, System.Text.Encodings.Web, et System.Text.Encoding.CodePages. MSBuild suppose que les versions incluses de ces assemblages de .NET 4.8 sont équivalentes aux versions NuGet, mais les redirections de liaison dans App.config requièrent les versions NuGet. Les fichiers manquants causent l'exception au démarrage.
Solution
Option 1: Migrate to PackageReference (Recommended)
Faites un clic droit sur packages.config dans Visual Studio et sélectionnez Migrer les packages.config vers PackageReference. Vérifiez que <AutoGenerateBindingRedirects> est activé dans le fichier .csproj, puis reconstruisez. L'intégration MSBuild de PackageReference ne déclenche pas le comportement de saut de façade.
Option 2 : Forcer la copie de la DLL de la façade avec une cible AfterBuild
Si la conservation de packages.config est nécessaire, ajoutez cette cible MSBuild au fichier .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>
Ajustez les numéros de version pour qu'ils correspondent exactement aux versions restaurées dans votre répertoire packages.
Configurer <Private>True</Private> (Copy Local) sur les références de façade ne résout pas le problème ; La détection de façade de MSBuild bloque toujours l'étape de copie.

