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

.NET6迁移后Microsoft.AspNetCore.Server.Kestrel.Transport.Quic加载错误排查

问题解决与.NET6迁移指南

一、本地查看程序集加载位置的方法

1. 代码方式记录加载日志

在Program.cs中添加程序集加载事件,记录每个程序集的加载路径与版本:

using System.Reflection;
using System.IO;

AppDomain.CurrentDomain.AssemblyResolve += (sender, args) =>
{
    try
    {
        var assembly = Assembly.Load(args.Name);
        if (assembly != null)
        {
            File.AppendAllText(
                "assembly-load-log.txt",
                $"[{DateTime.Now:yyyy-MM-dd HH:mm:ss}] Loaded: {args.Name}{Environment.NewLine}Path: {assembly.Location}{Environment.NewLine}{Environment.NewLine}"
            );
        }
        return assembly;
    }
    catch (Exception ex)
    {
        File.AppendAllText(
            "assembly-load-log.txt",
            $"[{DateTime.Now:yyyy-MM-dd HH:mm:ss}] Failed to load: {args.Name}{Environment.NewLine}Error: {ex.Message}{Environment.NewLine}{Environment.NewLine}"
        );
        return null;
    }
};

// 原有Program.cs业务代码继续...

运行程序后,当前目录会生成assembly-load-log.txt,可从中查看目标程序集的加载细节。

2. 工具方式查看

使用Process Explorer:

  • 启动本地API程序
  • 打开Process Explorer找到对应进程,右键选择「Properties」→「Modules」
  • 在列表中定位Microsoft.AspNetCore.Server.Kestrel.Transport.Quic.dll,查看「Path」列的实际路径与版本。

二、解决程序集版本不匹配问题

1. 对齐本地与CI/CD的.NET SDK版本

自包含发布的依赖版本由构建环境的.NET SDK决定,若本地用6.0.4 SDK、CI/CD用6.0.0,会导致依赖版本不一致:

  • 在CI/CD环境安装6.0.4版本的.NET SDK,或在发布命令中显式指定Runtime版本:
dotnet publish --runtime win-x64 --self-contained -c release -o build -p:RuntimeVersion=6.0.4

2. 显式指定NuGet包版本

在项目文件(.csproj)中添加目标包的显式引用,锁定版本为6.0.4:

<PackageReference Include="Microsoft.AspNetCore.Server.Kestrel.Transport.Quic" Version="6.0.4" />

执行dotnet restore后重新发布。

3. 清理CI/CD缓存与旧构建文件

CI/CD服务器可能残留旧版本构建文件引发冲突:

  • 删除工作目录下的build、bin、obj等旧文件夹
  • 重新执行构建发布流程

4. 检查.runtimeconfig.json配置

查看发布目录下的<YourApp>.runtimeconfig.json,确认framework.version为6.0.4:

{
  "runtimeOptions": {
    "tfm": "net6.0",
    "framework": {
      "name": "Microsoft.NETCore.App",
      "version": "6.0.4"
    }
  }
}

若版本错误,重新发布或手动修正后重启服务。

三、完整的.NET6迁移步骤(从.NET Core 3.1)

  • 修改项目目标框架:将.csproj中的TargetFramework从netcoreapp3.1改为net6.0
  • 升级NuGet依赖:将所有包升级到兼容.NET6的稳定版本(优先选择6.x系列)
  • 调整Program.cs结构:可移除Startup.cs,改用.NET6顶级语句模式整合配置与中间件;若保留Startup,需适配Program.cs的CreateHostBuilder逻辑
  • 验证中间件配置:检查UseRouting、UseEndpoints等中间件顺序,符合.NET6推荐配置
  • 本地功能测试:启动服务验证所有接口、业务逻辑正常运行
  • 标准化发布流程:
    1. 使用与本地一致的.NET SDK版本执行发布
    2. 自包含发布时显式指定Runtime版本(如-p:RuntimeVersion=6.0.4)
    3. 确保CI/CD环境SDK版本与本地完全对齐
  • 清理与验证:清理本地和CI/CD的旧构建缓存,发布后检查目标目录依赖文件版本是否正确

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 14:20:42