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

修复ASP.NET Core已弃用包:解决System.Text.Encodings.Web安全漏洞

解决.NET 6项目中System.Text.Encodings.Web漏洞与Microsoft.AspNetCore.Hosting.Abstractions弃用问题

步骤1:移除弃用的NuGet包

直接卸载项目中引用的Microsoft.AspNetCore.Hosting.Abstractions 2.2.0版本。.NET 6的ASP.NET Core共享框架已经内置了IWebHost等相关类型的定义,无需依赖这个旧版的独立包。卸载后,旧包带来的System.Text.Encodings.Web 4.5.0传递依赖会自动移除。

步骤2:显式升级System.Text.Encodings.Web

在项目文件(.csproj)中添加或更新System.Text.Encodings.Web的包引用,指定兼容.NET 6的安全版本(比如6.0.1及以上):

<PackageReference Include="System.Text.Encodings.Web" Version="6.0.1" />

这样直接锁定安全版本,避免依赖过时的旧版本。

步骤3:调整迁移扩展方法(确保编译正常)

你的扩展方法中scope变量未定义,补全后代码如下(.NET 6中可直接使用IWebHost,无需额外引用):

using Microsoft.AspNetCore.Hosting;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;

public static IWebHost MigrateDbContext<TContext>(this IWebHost webHost, Action<TContext, IServiceProvider> seeder) 
    where TContext : DbContext
{
    using var scope = webHost.Services.CreateScope();
    var services = scope.ServiceProvider;
    var logger = services.GetRequiredService<ILogger<TContext>>();
    var context = services.GetService<TContext>();

    try
    {
        logger.LogInformation("开始迁移数据库(上下文:{ContextName})", typeof(TContext).Name);
        context.Database.Migrate();
        seeder?.Invoke(context, services);
        logger.LogInformation("数据库迁移完成");
    }
    catch (Exception ex)
    {
        logger.LogError(ex, "迁移数据库时出错(上下文:{ContextName})", typeof(TContext).Name);
        throw;
    }

    return webHost;
}

原理说明

  • .NET 6的ASP.NET Core共享框架已整合了原Microsoft.AspNetCore.Hosting.Abstractions中的核心类型(如IWebHost),无需单独引用旧版包。
  • 旧版包的传递依赖会引入有漏洞的System.Text.Encodings.Web 4.5.0,移除旧包后显式指定新版本即可解决安全警告。
  • 调整后的扩展方法直接使用框架内置的IWebHost,编译和运行都能正常工作。

内容的提问来源于stack exchange,提问作者Mihai Socaciu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 11:35:14