.NET 6迁移:类库使用System.Web适配器时加载System.Web异常
替换命名空间引用:检查类库代码中所有
HttpContext相关的using语句,把using System.Web;全部替换为using Microsoft.AspNetCore.SystemWebAdapters;,避免命名空间冲突导致编译器优先调用旧的System.Web实现。清理项目依赖配置:打开类库的
.csproj文件,确认没有残留的<Reference Include="System.Web" />节点,如有直接删除。同时核对Microsoft.AspNetCore.SystemWebAdapters的包引用是否正确,示例配置如下:<PackageReference Include="Microsoft.AspNetCore.SystemWebAdapters" Version="1.0.0" />(版本号请根据实际使用的工具版本调整)
强制重新生成依赖:除了删除
bin/obj文件夹,还可以执行以下操作:- 在Visual Studio中右键解决方案,依次选择清理解决方案和生成解决方案
- 打开命令行进入项目目录,执行
dotnet clean和dotnet restore命令,强制重新拉取并解析依赖
清除调试符号缓存:调试时跳转至
System.Web的实现,可能是符号缓存导致的。打开Visual Studio的工具-选项-调试-符号,清除符号缓存后重新启动调试。也可以在调试时右键调用栈中的HttpContext方法,选择转到反汇编,查看实际加载的程序集路径,确认是否为SystemWebAdapters的dll文件。明确指定实现类:如果命名空间替换后仍有歧义,在代码中使用完全限定名
Microsoft.AspNetCore.SystemWebAdapters.HttpContext.Current,强制调用SystemWebAdapters的实现。核对引用链路:如果该
net472类库被.NET 6项目引用,确保使用项目引用而非二进制引用,避免引用旧的编译产物。同时检查.NET 6项目的依赖项,确认没有间接引入System.Web的包。
内容的提问来源于stack exchange,提问作者sanjuro

