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

.NET 7类库自托管ASP.NET Core编译正常但运行时加载失败

问题原因分析
  1. 宿主程序未声明共享框架依赖:你的类库项目虽然引用了Microsoft.AspNetCore.App共享框架,但作为自托管Web API入口的控制台宿主程序,并没有添加对应的FrameworkReference。.NET共享框架的程序集不会被复制到输出目录,而是由运行时从全局位置加载,只有当宿主程序明确声明依赖时,CLR才会在运行时自动加载共享框架中的程序集。
  2. 类型加载上下文限制:通过Type.GetType加载类库中的类型时,默认的程序集加载上下文没有包含共享框架的搜索路径。因为宿主程序未声明依赖,运行时不会将Microsoft.AspNetCore.App的程序集路径纳入搜索范围,导致后续调用该类型的方法时,找不到依赖的ASP.NET Core程序集。
正确的共享框架依赖管理方式
  • 给控制台宿主项目添加共享框架引用:在控制台项目的.csproj中添加以下配置,确保运行时能识别并加载Microsoft.AspNetCore.App共享框架:
    <FrameworkReference Include="Microsoft.AspNetCore.App" />
    
    类库项目的该引用保留,但必须确保宿主程序也添加此配置,这是解决问题的核心。
  • 禁止手动复制共享框架DLL:手动复制Microsoft.AspNetCore.dll到输出目录会绕过.NET共享框架的版本管理机制,可能引发版本冲突、部署体积增大、后续框架更新无法生效等问题,完全不可取。
  • 确保项目目标框架一致:类库和控制台宿主项目的目标框架必须统一为net7.0,避免因框架版本不匹配导致的程序集加载异常。
  • 优化类型加载逻辑:如果必须通过Type.GetType加载类型,可在加载前初始化ASP.NET Core的WebHost(比如调用WebApplication.CreateBuilder),此时运行时会自动解析共享框架的依赖路径,无需手动干预。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 22:10:21