.NET Framework 4.6加载libSkiaSharp原生DLL失败问题求助
针对你在.NET Framework 4.6环境下使用QuestPDF时遇到的SkiaSharp原生库加载失败问题,可尝试以下解决方案:
确认输出目录是否包含原生库文件
检查项目的bin/Debug或bin/Release目录下,是否存在runtimes/win-x86/native/libSkiaSharp.dll或runtimes/win-x64/native/libSkiaSharp.dll(取决于你的平台目标)。如果不存在,说明NuGet包的自动复制逻辑未生效,需要手动处理。设置项目平台目标为具体架构
避免使用Any CPU,将项目属性中的“平台目标”设置为x86或x64,确保与SkiaSharp.NativeAssets.Win32提供的原生库架构匹配。设置后清理并重新生成项目,让NuGet自动复制对应架构的原生文件。手动复制原生库到输出目录
从NuGet包目录(通常是解决方案目录/packages/SkiaSharp.NativeAssets.Win32.{版本号}/runtimes)找到对应架构的libSkiaSharp.dll,复制到项目输出目录的根目录,或者将该文件添加到项目中,设置其“复制到输出目录”属性为“始终复制”。强制指定原生库加载路径
在应用启动代码中,手动指定SkiaSharp原生库的路径,示例代码:using SkiaSharp; // 在应用初始化时调用 SKRuntimeLibraryLoader.LoadLibrary(@"C:\YourProject\bin\Debug\runtimes\win-x64\native\libSkiaSharp.dll");路径替换为你实际的原生库文件路径。
修复NuGet包并确保版本匹配
卸载SkiaSharp和SkiaSharp.NativeAssets.Win32包,清理项目的packages目录和输出目录,然后重新安装与QuestPDF依赖版本一致的SkiaSharp相关包,避免版本不兼容导致的加载问题。添加或更新App.config的绑定重定向
检查项目的App.config文件,确保包含SkiaSharp的绑定重定向配置,示例:<configuration> <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="SkiaSharp" publicKeyToken="0738eb9f132ed756" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-{你的SkiaSharp版本}" newVersion="{你的SkiaSharp版本}" /> </dependentAssembly> </assemblyBinding> </runtime> </configuration>将
{你的SkiaSharp版本}替换为实际安装的版本号,确保所有引用SkiaSharp的组件使用同一版本。
内容的提问来源于stack exchange,提问作者ronimizy

