【问题标题】:Microsoft.Bcl.Async trying to load System.Threading.Tasks 1.5.11.0Microsoft.Bcl.Async 尝试加载 System.Threading.Tasks 1.5.11.0
【发布时间】:2017-08-16 02:14:54
【问题描述】:

我已将 Microsoft.Bcl.Build/Microsoft.Bcl 和 Microsoft.Bcl.Async 添加到我想要使用 async/await 的解决方案中的一些项目中。 在我安装了 .Net4.5 的机器上一切正常。但是,当我在仅安装了 .Net4 的机器上启动应用程序时,有时应用程序会崩溃并出现以下异常:

无法加载文件或程序集“System.Threading.Tasks, Version=1.5.11.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。 (HRESULT 异常:0x80131040)

查看 StackTrace,异常似乎是在我们引用的第三方库中生成的。

当我分析 Microsoft.Bcl.Async 提供的 Microsoft.Threading.Tasks.dll 时,我发现它确实引用了 System.Threading.Tasks 版本 1.5.11.0,但版本 2.6.10.0 包含在 Microsoft.Bcl 中。

我做错了吗?

【问题讨论】:

  • 最早支持的 .NET 版本是 4.5.2。您应该升级并摆脱 BCL Async。 4.5.2 还增加了对 TLS 1.2 的支持,每天都有更多服务需要,例如 Google、银行、航空公司。
  • PS“只有”4.0 的机器可能很快通过 Windows 更新获得 4.5.2,如果它还没有的话。
  • PPS - 开源库在 9 个月内开始放弃对 4.0 的支持。例如 Json.NET 10.0 刚刚放弃 4.0 支持
  • @PanagiotisKanavos 我不是为了好玩而使用 Microsoft.Bcl 你知道吗?由于缺少 Windows XP 支持,并不是每个人都可以升级到 4.5。不要告诉我也不支持 Windows XP。我知道。机器只安装了 4.0,因为我卸载了 4.5 来重现 bug 报告。许多客户出于某种原因禁用了更新。
  • 我不得不说。杀手锏是 TLS 1.2。您将无法很快连接到 Web 和 REST 服务。至于原因,只要您在合同中包含赔偿条款,免除您因缺少更新或加密损坏而导致的安全漏洞......

标签: c# .net .net-4.0 async-await


【解决方案1】:

我找到了解决方案!其实很简单。我只需将 nuget 在 app.config 文件中添加的绑定重定向复制并粘贴到 *.exe.config 文件中。然后它就神奇地起作用了。轻松修复。

【讨论】:

  • 其实,你应该升级到 .NET 4.5 并摆脱 BCL Async。 .NET 4.0 不再受支持。最早支持的版本是 4.5.2
  • @PanagiotisKanavos 创建安装程序时,您需要它来支持安装在客户机器上的 .net 版本。所以你的评论离题了。
  • @Softlion 相反,它是安装运行时的应用程序。至于“安装的 .net 版本”至少是 4.5.2,因为支持的 Windows 版本已经预装了它。 无操作系统版本 4.0 附带。 Windows 7 有 3.5,Windows 8 有 4.5。此外,4.x 版本是就地升级,因此即使在较旧的操作系统中,该应用程序也可能不会在 4.0 上运行。最后,4.0 不支持当今 HTTPS 通信所需的 TLS1.2。除非它们在 4.5+ 运行时之上运行。
  • @PanagiotisKanavos 我一写到需要 Windows XP 支持,你的宣传就跑题了。
  • 如何为 dll 程序集/类库执行此操作
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-08
  • 2014-02-08
  • 2014-01-30
  • 2014-05-01
相关资源
最近更新 更多