.NET Framework 4.8 Windows 서비스 시작 예외
IronPDF .NET Framework 4.8 Windows Service 프로젝트가 FileNotFoundException를 생성하거나, 또는 라이선스 키를 설정할 때 ChromePdfRenderer를 생성합니다. "동일한 코드는 콘솔이나 WinForms 호스트에서 정상적으로 작동합니다."
MSBuild의 façade-감지 로직은 여섯 가지 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를 오른쪽 클릭하고 패키지 구성 파일을 PackageReference로 마이그레이션을 선택합니다. 파일 내에서 <AutoGenerateBindingRedirects>가 활성화되어 있는지 확인한 다음, 다시 빌드하십시오. "PackageReference의 MSBuild 통합은 facade-skipping 동작을 트리거하지 않습니다."
옵션 2: AfterBuild 대상과 함께 facade 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 디렉터리에 복원된 정확한 버전과 일치하도록 버전 번호를 조정하십시오.
facade 참조에 대해 <Private>True</Private> (복사 로컬)을 설정해도 문제가 해결되지 않습니다; "MSBuild의 facade 검색은 여전히 복사 단계를 차단합니다."

