.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
相关产品推荐
相关产品推荐

