无法加载文件或程序集System.Net.Http版本4.1.1.0

时间:2017-03-10 14:13:06

标签: c# .net .net-core porting .net-framework-version

我将Net Framework 4 dll移植到Net Core。 移植我的单元测试项目时,我得到一个运行某些特定测试的异常(不是全部)。

  

System.IO.FileLoadException:无法加载文件或程序集&System; Net.Net.Http,Version = 4.1.1.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'或其中一个依赖项。定位的程序集的清单定义与程序集引用不匹配。 (HRESULT异常:0x80131040)

这是我的dll的project.json

export PATH=/opt/glassfish4/bin:$PATH

这是单元测试项目的Packages.config

 {
  "version": "1.0.0-*",

  "dependencies": {
    "log4net": "2.0.7",
    "NETStandard.Library": "1.6.1",
    "Newtonsoft.Json": "9.0.1",
    "StackExchange.Redis": "1.2.1"
  },

  "frameworks": {
    "netstandard1.6": {
      "imports": "dnxcore50"
    }
  }
}

11 个答案:

答案 0 :(得分:32)

通过将System.Net.Http更新为4.3.1

来解决此问题

答案 1 :(得分:20)

我遇到了这个问题,并意识到这是因为我有两个不同的引用。 一个引用来自我的项目库,第二个引用是.Net标准库的依赖项,因此是一个Nuget包。 要解决的步骤如下:

  • 删除对System.Net.Http的引用(project => add reference =>删除引用)。
  • 保留System.Net和System.Net.Http Nuget包
  • 运行Update-Package –reinstall System.Net.Http以恢复参考。

现在再次运作。 :)

答案 2 :(得分:3)

我的问题是我的服务有一个引用的程序集,它引用了较新版本的System.Net.Http。 我通过更新服务中的System.Net.Http解决了这个问题。

答案 3 :(得分:2)

我在 .NET Framework 4.8 项目中引用 System.Net.Http 4.2.0.0 版时遇到了同样的问题。

仔细阅读异常信息,我注意到有一个名为“FusionLog”的条目。
它指出在我的 App.config 文件中 System.Http.Net 的绑定中存在版本重定向。

在 App.config 中,我发现了一个 XML 部分,例如:

  <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.1.1.0" newVersion="4.1.1.0"/>
      </dependentAssembly>
    </assemblyBinding>
  </runtime>

删除整个 assemblyBinding 部分就成功了。

答案 4 :(得分:1)

我有这个问题,而我有10个项目相互依赖。 我通过在其中一个依赖的项目中添加它要求的版本来修复它。 它不需要编译,但似乎添加它,在恢复时修复了其他项目中的版本。 所以它是:

  

无法加载文件或程序集'System.Net.Http,Version = 4.1.1.0,   Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'或其中一个   依赖。系统找不到指定的文件。

然后:

  

无法加载文件或程序集'System.Net.Http,Version = 4.1.1.1,   Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'或其中一个   依赖。系统找不到指定的文件。

所以我补充道     “System.Net.Http”:“4.1.1”, 在一个项目中..

这实际上修复了8个项目时的问题。

答案 5 :(得分:1)

我同意让。删除对程序集的引用,然后通过Nuget添加新的引用!实际的System.Net.Http版本并不重要。 删除对程序集的引用后,一切正常,版本4.3.2

答案 6 :(得分:1)

解决此问题的最佳和最简便的方法是使用绑定重定向。

只需将oldVersion指定为0.0.0.0-5.0.0.0,将newVersion指定为4.1.1.0

例如,您的版本是4.1.1.0。

答案 7 :(得分:1)

现在是初级程序员解决方案。...再次检查您是否也在正确的位置进行了Nuwen Package Manager中的Jawen和Jean建议的更新。请记住,您的项目和测试项目可能都有解决方案,因此请仔细检查以更新两组引用。

答案 8 :(得分:1)

转到app.config并删除所有引用System.Net.Http的行。

答案 9 :(得分:0)

也许是无用的,但是我的问题是Azure不支持最新的.NET Framework。

答案 10 :(得分:0)

我尝试了各种解决方案(删除了dependentAssembly或也指定了绑定重定向)。他们都没有工作。

但是,唯一对我有用的解决方案是从Visual Studio中将System.Net.Http的“特定版本”(或提供版本问题的任何DLL)显式设置为False。

enter image description here