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

安装NuGet包后调用IQueryable.Where()出现System.Runtime.Loader加载错误

问题描述

在.NET Framework项目中安装某NuGet包后,编译、重建及调试启动均正常,但仅当实际调用该NuGet包的代码(如构造函数/方法)后,执行IQueryable.Where()时会抛出以下错误:

Could not load file or assembly 'System.Runtime.Loader, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.

  • 未实际使用该NuGet包时,Where()调用完全正常;仅添加using不调用也无问题。
  • 项目及NuGet包本身均未直接引用System.Runtime.Loader,也找不到间接引用该程序集的路径。
  • 已知System.Runtime.Loader不支持.NET Framework,且项目与NuGet包单独运行均正常。
解决方案

1. 添加程序集绑定重定向

.NET Framework中,版本冲突可能触发错误的程序集加载请求。在项目的App.config或Web.config中添加以下配置,强制重定向或阻止加载System.Runtime.Loader:

<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Runtime.Loader" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
        <!-- 重定向到兼容版本,若找不到则启用publisherPolicy跳过加载 -->
        <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.1.0" />
        <!-- <publisherPolicy apply="no" /> -->
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

2. 排查NuGet包的传递依赖

部分NuGet包可能通过传递依赖引入.NET Core专属组件,即使标注支持.NET Framework:

  • 在Visual Studio中右键项目→管理NuGet程序包→查看该包的“依赖项”列表,排查是否有.NET Core专属包。
  • 用命令行工具dotnet list package --include-transitive(或NuGet控制台的Get-Package -All -ProjectName 你的项目名)查看所有传递依赖,定位是否有引用System.Runtime.Loader的包。
  • 若发现问题依赖,尝试更新该NuGet包到最新.NET Framework兼容版,或联系包作者修复。

3. 启用程序集加载日志定位根源

通过Visual Studio的加载日志找到触发请求的组件:

  • 打开Visual Studio→调试→选项→调试→输出窗口→勾选“程序集加载消息”的“启用”。
  • 重启调试触发错误,查看输出窗口的日志,找到请求加载System.Runtime.Loader的调用栈,定位根源。

4. 清理缓存并重建

缓存文件可能导致异常引用:

  • 删除项目的bin和obj文件夹。
  • 右键解决方案→清理解决方案→重建解决方案。
  • 清除NuGet缓存:工具→NuGet包管理器→包管理器设置→清除所有NuGet缓存。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 17:41:32