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

.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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 23:12:02