You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 6 WebApi使用TuesPechkin转PDF遇类型加载异常求助

问题解决:.NET 6 WebApi + TuesPechkin HTML转PDF TypeLoadException

核心原因

TuesPechkin是基于.NET Framework开发的库,依赖的System.Security.Principal.WindowsImpersonationContext属于.NET Framework的mscorlib组件,而.NET 6使用独立的CoreLib运行时。当应用池设置为「无托管代码」时,IIS直接运行.NET 6原生代码,无法加载.NET Framework专属的类型;同时RemotingToolset依赖的.NET Framework远程处理机制在.NET 6中已被移除,进一步触发兼容问题。


解决方案

方案1:替换为.NET 6兼容的库(推荐)

放弃TuesPechkin,改用原生支持.NET 6的HTML转PDF库:

  • DinkToPdf:基于wkhtmltopdf核心,API风格与TuesPechkin接近,适配.NET Core/.NET 5+
  • PuppeteerSharp:基于Chrome无头浏览器,渲染效果更贴近现代浏览器,适合复杂HTML场景

方案2:调整配置继续使用TuesPechkin

若必须保留TuesPechkin,按以下步骤修改:

  1. 修改IIS应用池配置

    • 将「.NET CLR版本」从「无托管代码」改为v4.0.30319(或任意可用的.NET Framework版本)
    • 确保应用池身份拥有读写临时目录的权限(TempFolderDeployment需要写入权限)
  2. 调整转换器初始化代码
    替换RemotingToolset为LocalToolset,规避远程处理的兼容问题:

    public static class TuesPechkinPdfConverter
    {
        public static IConverter Converter { get; } = new ThreadSafeConverter(
            new LocalToolset<PdfToolset>(new Win64EmbeddedDeployment(new TempFolderDeployment())));
    }
    
  3. 验证依赖文件
    确认TuesPechkin.Wkhtmltox.Win64包中的wkhtmltopdf二进制文件已被正确复制到输出目录,必要时手动将wkhtmltox文件夹复制到WebApi根目录。


错误补充说明

触发System.TypeLoadException的直接原因:

  • .NET 6运行时无法识别.NET Framework mscorlib中的WindowsImpersonationContext类型
  • 「无托管代码」的应用池模式下,IIS未加载.NET Framework兼容层,导致跨运行时类型调用失败

内容的提问来源于stack exchange,提问作者Emanuele

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 23:25:23