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

ASP.NET Core 6.0 Web应用控制器映射时请求类型加载失败求助

ASP.NET Core 6.0程序集引用冲突导致类型加载失败的排查方案

问题概述

  • 在ASP.NET Core 6.0 Web应用的Startup.cs中配置控制器映射时,触发错误:Unable to load one or more of the requested types
  • 项目已通过项目引用引入QESI.Accuracy.Contract程序集,此前使用该项目内类无异常
  • 该程序集同时被打包为NuGet包供其他解决方案使用,推测系统错误加载NuGet包版本而非项目引用,引发冲突
  • 将项目程序集名称后缀改为“2”后,出现「同一类型存在于两个程序集」的错误,证实存在对该NuGet包1.1.58版本的隐性引用
  • 已按微软官方文档清理所有NuGet缓存,问题未得到解决

排查与解决步骤

1. 梳理依赖关系,定位隐性引用

  • 执行dotnet list package命令,查看项目的所有NuGet依赖,确认是否有第三方包间接引用了QESI.Accuracy.Contract 1.1.58版本
  • 检查Web项目的.csproj文件及解决方案级的packages.config,排查是否存在该NuGet包的显性引用,若有直接移除

2. 强制锁定项目引用优先级

  • 在Web项目的.csproj中,为项目引用添加PrivateAssets="All"属性,避免被其他依赖传递引用:
    <ProjectReference Include="..\QESI.Accuracy.Contract\QESI.Accuracy.Contract.csproj">
      <PrivateAssets>All</PrivateAssets>
    </ProjectReference>
    
  • 在项目的<PropertyGroup>节点中添加配置,禁用传递性项目引用:
    <PropertyGroup>
      <DisableTransitiveProjectReferences>true</DisableTransitiveProjectReferences>
    </PropertyGroup>
    

3. 清理本地编译文件与重新构建

  • 删除Web项目根目录下的bin和obj文件夹
  • 依次执行dotnet clean、dotnet restore命令,再重新生成整个解决方案

4. 启用程序集加载日志,定位加载来源

  • 通过以下步骤生成程序集加载日志,明确系统实际加载的程序集路径:
    1. 打开命令提示符,执行set COMPLUS_LoadFromRemoteSources=1
    2. 执行set COMPLUS_LogAssemblyBindings=1
    3. 启动Web应用,查看生成的fusionlog.dll日志,确认加载的是项目编译后的程序集还是NuGet包内的程序集

5. 清理IDE缓存,避免旧引用残留

  • 关闭Visual Studio
  • 删除%LOCALAPPDATA%\Microsoft\VisualStudio\<你的VS版本号>\ComponentModelCache目录下的所有文件
  • 重新打开解决方案并完成构建

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 08:15:37