【问题标题】:Do I need Microsoft.Bcl.Async package in .NET 4.5?我需要 .NET 4.5 中的 Microsoft.Bcl.Async 包吗?
【发布时间】:2016-02-14 06:15:23
【问题描述】:

我有一个针对 .NET Framework 4.5 的项目 P,它有一个针对 4.0 的 NuGet 包 A(它没有 4.5)。现在,A 依赖于Microsoft.Bcl.Async NuGet 包。强制删除项目PMicrosoft.Bcl.Async 的依赖是否安全,因为它的目标是4.5?如果删除它确实是安全的 - 为什么?

【问题讨论】:

  • 首先你应该联系那个包的作者。应更新此软件包以正常工作。其次,如果该作者没有回应,那可能表明该软件包已死亡,您应该在 NuGet.org 上查看一个更好的替代方案。
  • @LexLi 制作支持旧版本 .Net 的包有什么问题?除此之外,我在问题中没有看到任何迹象表明该软件包无法正常工作。
  • @svick 作者至少应该为 net40 和 net45 创建单独的依赖列表,以避免 .NET 4.5 用户被Microsoft.Bcl.Async 困扰。如果您查看其他著名的软件包,您会发现他们这样做了。

标签: .net .net-4.0 async-await .net-4.5


【解决方案1】:

您仍然需要 Microsoft.Bcl.Async。包 A 中的程序集将引用 Microsoft.Bcl.Async 包中程序集的类型和方法。在 .Net 4.5 上,您有具有等效功能的方法,但您不会有完全相同的方法,因此包 A 将无法工作。

例如,如果您在使用 Microsoft.Bcl.Async 时在 .Net 上 awaitTask,您的代码将在 AwaitExtensions 程序集中调用 AwaitExtensions 类型的扩展方法 public static TaskAwaiter GetAwaiter(this Task task)

在 .Net 4.5 上,该程序集不存在,因此此类代码不起作用。

【讨论】:

  • 在模拟了@svick 已经很好解释的内容后,我接受了@Hans Passant 的建议并挖掘了更多内容。我查看了 async 方法的 IL。他们拥有来自System.Runtime 程序集的System.Runtime.CompilerServices.AsyncStateMachineAttribute,该程序集来自Microsoft.Bcl NuGet 包。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-12
  • 1970-01-01
相关资源
最近更新 更多