ASP.NET Core使用ImageProcessor转WebP部署后无法加载libwebp.dll
ASP.NET Core 部署后转WebP提示
cannot load libwebp.dll解决方法 问题根因
报错是ImageProcessor处理WebP格式依赖的原生libwebp库未随应用发布到托管环境导致,和贴出的业务转换代码无关。本地运行正常是因为开发环境下NuGet包会自动将原生库存入本地运行时缓存,发布配置不当时原生库不会被输出到部署目录,托管环境找不到对应文件就会抛出该错误。
修复步骤
- 补装平台对应原生依赖包
仅安装核心ImageProcessor包不会自动带入跨平台的原生WebP依赖,需要根据托管环境安装匹配的NuGet包:- Windows 64位环境:安装
ImageProcessor.Plugins.WebP.Native.win-x64,32位环境替换为x86版本 - Linux 64位环境:安装
ImageProcessor.Plugins.WebP.Native.linux-x64 - macOS环境:安装
ImageProcessor.Plugins.WebP.Native.osx-x64
- Windows 64位环境:安装
- 修正发布配置避免原生库遗漏
打开项目csproj文件,在<PropertyGroup>节点添加如下配置,防止发布时原生依赖被裁剪、排除:
非单文件发布场景,发布完成后检查发布目录下的<!-- 单文件发布时将原生库打包进发布产物 --> <IncludeNativeLibrariesForSelfExtract>true</IncludeNativeLibrariesForSelfExtract> <!-- 关闭程序集裁剪,避免依赖被误删除 --> <PublishTrimmed>false</PublishTrimmed>runtimes文件夹,确认对应托管系统版本的子目录中native文件夹内存在libwebp相关文件(Windows下为libwebp.dll、Linux下为libwebp.so、macOS下为libwebp.dylib),如果缺失直接从本地bin目录的对应路径复制到发布目录根目录即可。 - 排查托管环境权限问题
IIS托管的Windows环境需要给站点部署根目录添加IIS_IUSRS用户的读取、执行权限,权限不足时即使dll存在也会触发加载失败。 - 独立部署注意匹配运行时标识符
采用独立部署模式时,必须选择和托管环境完全匹配的运行时标识符(RID):64位Windows Server选win-x64、64位Linux发行版选linux-x64,选择便携模式或错误RID会导致原生库无法被正确识别加载。
内容的提问来源于stack exchange,提问作者seme
相关产品推荐
相关产品推荐

