.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,按以下步骤修改:
修改IIS应用池配置
- 将「.NET CLR版本」从「无托管代码」改为v4.0.30319(或任意可用的.NET Framework版本)
- 确保应用池身份拥有读写临时目录的权限(
TempFolderDeployment需要写入权限)
调整转换器初始化代码
替换RemotingToolset为LocalToolset,规避远程处理的兼容问题:public static class TuesPechkinPdfConverter { public static IConverter Converter { get; } = new ThreadSafeConverter( new LocalToolset<PdfToolset>(new Win64EmbeddedDeployment(new TempFolderDeployment()))); }验证依赖文件
确认TuesPechkin.Wkhtmltox.Win64包中的wkhtmltopdf二进制文件已被正确复制到输出目录,必要时手动将wkhtmltox文件夹复制到WebApi根目录。
错误补充说明
触发System.TypeLoadException的直接原因:
- .NET 6运行时无法识别.NET Framework mscorlib中的
WindowsImpersonationContext类型 - 「无托管代码」的应用池模式下,IIS未加载.NET Framework兼容层,导致跨运行时类型调用失败
内容的提问来源于stack exchange,提问作者Emanuele
相关产品推荐
相关产品推荐

