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

.NET 4.5中ReflectionOnly加载System.Net.Http 4.2.0.0失败求助

.NET 4.5下ReflectionOnly上下文加载System.Net.Http 4.2.0.0的解决办法
  • 直接指定程序集路径加载
    ReflectionOnlyLoad默认只会在GAC和应用程序目录查找,但.NET4.5里的System.Net.Http 4.2.0.0通常不会默认存在于GAC(尤其是通过NuGet安装的版本)。找到该dll的实际路径(比如NuGet包目录或项目bin目录),用Assembly.ReflectionOnlyLoadFrom方法加载:
string httpAssemblyPath = @"C:\YourProject\packages\System.Net.Http.4.2.0\lib\net45\System.Net.Http.dll";
Assembly reflectionOnlyHttp = Assembly.ReflectionOnlyLoadFrom(httpAssemblyPath);
  • 手动处理程序集绑定重定向
    ReflectionOnly上下文不会自动读取app.config里的绑定重定向规则,得注册ReflectionOnlyAssemblyResolve事件来处理版本匹配问题:
AppDomain.CurrentDomain.ReflectionOnlyAssemblyResolve += (sender, resolveArgs) =>
{
    var requestedName = new AssemblyName(resolveArgs.Name);
    if (requestedName.Name == "System.Net.Http")
    {
        // 替换成你项目里System.Net.Http.dll的实际路径
        string localPath = @"C:\YourProject\bin\Debug\System.Net.Http.dll";
        return Assembly.ReflectionOnlyLoadFrom(localPath);
    }
    return null;
};

// 之后再加载你的目标程序集,它的依赖会触发上面的事件
Assembly.ReflectionOnlyLoad("YourTargetAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=xxx");
  • 检查GAC中是否存在该版本
    打开命令提示符,执行gacutil /l System.Net.Http查看GAC里有没有这个版本。如果有,确保程序运行时有足够权限访问GAC;如果没有,要么把这个版本的dll安装到GAC(不推荐,容易引发版本冲突),要么用前面两种方法指定路径加载。

  • 确保依赖链完整
    加载目标程序集时,ReflectionOnly上下文会自动尝试加载它的所有依赖,如果某个依赖的依赖也找不到,同样会报错。必要时在ReflectionOnlyAssemblyResolve事件里一并处理这些嵌套依赖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 02:57:50