.NET Framework 4.8 Windowsサービスの起動例外
IronPDF .NET Framework 4.8 Windows Service プロジェクトが、FileNotFoundException の構築時や、ライセンスキーの設定時に ChromePdfRenderer または StackOverflowException を投げます。 同じコードはコンソールまたはWinFormsホストでは正常に動作します。
MSBuild のファサード検出ロジックは、6つのNuGet提供のアセンブリを出力ディレクトリにコピーするのを防ぎます: System.ValueTuple, System.Buffers, System.Threading.Tasks.Extensions, System.Text.Json, System.Text.Encodings.Web, および System.Text.Encoding.CodePages。 MSBuild は、これらのアセンブリの内蔵 .NET 4.8 バージョンを NuGet バージョンと同等と見なしますが、App.config のバインドリダイレクトは NuGet バージョンを要求します。 ファイルの欠落が起動時の例外の原因となっています。
解決策
オプション1: PackageReference への移行(推奨)
Visual Studio で packages.config を右クリックし、Migrate packages.config to PackageReference を選択します。 .csproj ファイルで <AutoGenerateBindingRedirects> が有効になっていることを確認し、その後再ビルドします。 PackageReferenceのMSBuild統合はファサードスキッピングの動作をトリガーしません。
オプション2: AfterBuildターゲットでファサードDLLコピーを強制
packages.config を保持する必要がある場合、この MSBuild ターゲットを .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>
バージョン番号を調整して、packages ディレクトリで復元された正確なバージョンに一致させます。
ファサード参照で <Private>True</Private> (Copy Local) を設定しても問題は解決しません; MSBuildのファサード検出はコピーのステップを依然としてブロックします。

