.NET Framework 4.8 Windows服务启动异常
IronPDF .NET Framework 4.8 Windows服务项目在构造StackOverflowException。 相同的代码在控制台或WinForms主机中正常工作。
MSBuild的外观检测逻辑阻止六个NuGet提供的程序集被复制到输出目录:System.Text.Encoding.CodePages。 MSBuild假定这些程序集的内置.NET 4.8版本等同于NuGet版本,但App.config中的绑定重定向需要NuGet版本。 缺失文件导致启动时异常。
解决方案
选项1:迁移到PackageReference(推荐)
在Visual Studio中右键单击packages.config,然后选择将packages.config迁移到PackageReference。 验证.csproj文件中已启用,然后重新构建。 PackageReference的MSBuild集成不会触发facade跳过行为。
选项2:使用AfterBuild目标强制facade DLL复制
如果需要保留.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>(复制本地)并不能解决问题; MSBuild的facade检测仍然阻止了复制步骤。

