.NET Framework 4.8 Windows服务启动异常

Curtis Chau
Curtis Chau
Updated: 2026年6月10日

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>
XML

调整版本号以匹配在您的packages目录中还原的确切版本。

在外观引用上设置<Private>True</Private>(复制本地)并不能解决问题; MSBuild的facade检测仍然阻止了复制步骤。

Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。

阅读更多

准备开始了吗?

Nuget Downloads 21,739,885版本:2026.10刚刚发布