System.Net.Http.dll

时间:2018-10-25 01:37:44

标签: c# .net http json.net

我遇到有关System.Net.Http.dll 4.2.0.0版本的问题

这是我的设置-

  

Visual Studio 2017,15.8.7

     

面向.net 4.7.2的简单控制台应用程序

当我创建一个新项目时,默认情况下它具有对System.Net.Http.dll的引用,并且位置是C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\System.Net.Http.dll

但是当我执行代码时,

class Program
{
    static void Main(string[] args)
    {
        var assembly = GetAssemblyNameContainingType(typeof(HttpClient).FullName);
        Console.WriteLine("Path: " + assembly.Location);
        Console.WriteLine("Version: " + assembly.GetName().Version);

        Console.ReadKey();
    }

    public static Assembly GetAssemblyNameContainingType(String typeName)
    {
        foreach (Assembly currentassembly in AppDomain.CurrentDomain.GetAssemblies())
        {
            Type t = currentassembly.GetType(typeName, false, true);
            if (t != null)
            { return currentassembly; }
        }

        return null;
    }
}

我得到以下输出

  Path: C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Net.Http\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Net.Http.dll
  Version: 4.0.0.0 

似乎从GAC而不是System.Net.Http.dll文件夹中引用了Programs Files (x86)

我特别需要参考4.2.0.0-因为它以{Newtonsoft json可以序列化和反序列化而不会出错的方式}处理HttpRequestException的序列化。

我阅读了很多关于其他人遇到System.Net.Http.dll问题的帖子,其中许多人说这是在Visual Studio 2017 15.8中解决的,并且不必添加对{{1 }}的细节,应该让Visual Studio从框架中适当地引用它。

我想念什么吗? 我尝试了很多事情-

在项目属性中添加引用路径(C:\ Program Files(x86)\ Reference Assemblies \ Microsoft \ Framework.NETFramework \ v4.7.2)-没有帮助

使用C:\ Program Files(x86)\ Reference Assemblies \ Microsoft \ Framework.NETFramework \ v4.7.2 \ System.Net.Http.dll路径添加引用-没有帮助

复制本地-正确-没有帮助

特定版本-是-没有帮助

添加了绑定重定向-没有帮助。低于异常

System.Net.Http

System.BadImageFormatException:'无法加载文件或程序集'System.Net.Http,Version = 4.2.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'或其依赖项之一。参考程序集不应该加载执行。它们只能在“仅反射”加载器上下文中加载。 (来自HRESULT的异常:0x80131058)'

项目属性中未选中的自动生成绑定重定向-没有帮助

未经检查的具有手动绑定重定向的自动生成绑定重定向-没有帮助

未选中的自动生成的绑定重定向和手动绑定重定向+复制本地-没有帮助

添加提示路径-没有帮助              C:\ Program Files(x86)\ Reference Assemblys \ Microsoft \ Framework.NETFramework \ v4.7.2 \ System.Net.Http.dll     

这是我的.csproj(原始的,经过上述所有更改后已还原)

  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>

1 个答案:

答案 0 :(得分:0)

官方MS answer(Jose Perez Rodriguez撰写):

  

这是设计使然。由于Windows要求,所有框架   GAC中安装的程序集的版本必须为4.0.0.0。的   该程序集中包含的实际实现不是4.0.0.0   实施,但改为4.2.0.0。有很多   Windows为什么对我们有此要求的复杂原因   安装在GAC上的程序集,例如维修,错误修复和   对于所有.NET 4+框架都具有一个GAC,但实际上这是   预期的。

虽然您认为它是4.0,但实际上是4.2。 Dll hell,欢迎回来!