.NET Core MVC 6中ImageResizer.ImageBuilder加载HostingEnvironment报错求助
问题分析与解决方法
错误原因
你遇到的无法加载类型'System.Web.Hosting.HostingEnvironment'错误,核心原因是当前使用的ImageResizer版本是针对.NET Framework设计的,它依赖仅存在于.NET Framework中的System.Web组件,而你的项目大概率是.NET Core/.NET 5+环境——这类环境已移除System.Web相关API,因此会出现类型加载失败问题。
解决方案
1. 替换为.NET Core兼容的ImageResizer包
卸载原有ImageResizer包,安装适配.NET Core的ImageResizer.AspNetCore包:
# NuGet包管理器命令 Install-Package ImageResizer.AspNetCore # 或.NET CLI命令 dotnet add package ImageResizer.AspNetCore
2. 调整图片处理代码
适配.NET Core环境的使用逻辑,同时优化扩展名判断(避免重复调用GetExtension):
// 提取扩展名并统一转小写 var fileExtension = System.IO.Path.GetExtension(newFileName).ToLower(); // 用集合判断更简洁高效 var supportedExtensions = new HashSet<string> { ".jpg", ".jpeg", ".png", ".webp" }; if (supportedExtensions.Contains(fileExtension)) { var path = Path.Combine(_webHostEnvironment.WebRootPath, CMSUserAreaDir, "content_media/raw", newFileName); // 直接用属性配置缩放规则,比字符串指令更直观 var instructions = new ImageResizer.Instructions { MaxWidth = 1920 }; var imageJob = new ImageResizer.ImageJob(file, path, instructions, false, false); var result = ImageResizer.ImageBuilder.Current.Build(imageJob); string finalPath = result.FinalPath; }
3. 配置ImageResizer服务(关键步骤)
在项目的Program.cs(.NET 6+)或Startup.cs中,添加ImageResizer的服务与中间件配置:
// Program.cs示例(.NET 6+) var builder = WebApplication.CreateBuilder(args); // 注册ImageResizer服务 builder.Services.AddImageResizer(); var app = builder.Build(); // 启用ImageResizer中间件 app.UseImageResizer(); // 其他项目配置... app.Run();
额外优化建议
- 始终使用
Path.Combine拼接路径,避免直接字符串拼接导致的跨平台路径问题 - 可将支持的图片扩展名配置到
appsettings.json中,方便后期修改维护
内容的提问来源于stack exchange,提问作者Aman Tiwari
相关产品推荐
相关产品推荐

