Async等待定位4.0部署要求

时间:2013-03-15 19:40:47

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

Microsoft已更新.net 4.0的async / await目标,现在建议使用Microsoft.Bcl.Async上提供的nuget库。

在发行说明中,它指出.net 4需要KB 2468871

  1. KB2468871是构建要求还是部署要求?
  2. KB2468871的哪个方面需要它?

4 个答案:

答案 0 :(得分:2)

引自http://support.microsoft.com/kb/2468871/en-us

  

功能5对支持可移植库的更改。这些变化   包括API更新和活页夹修改。此更新启用了   CLR成功绑定到可移植库,以便单个DLL   可以在.NET Framework 4上,在Silverlight上,在Xbox上运行,也可以在   Windows Phone。此更新将公共Silverlight API添加到.NET   框架4在同一位置。 API签名将保留   整个平台一致。所有修改都是100%   兼容并且不会破坏任何现有代码。

事实证明,如果没有安装这个kb,Microsoft.Bcl会崩溃(它会尝试绑定到系统上没有的silverlight System.Core库)

答案 1 :(得分:2)

在.net 4.0中使用async / await而不安装KB2468871的唯一安全方法是在vs SP1 SP1中安装异步CTP v3,nuget microsoft bcl async并实现自己的AsyncTaskMethodBuilder和AsyncVoidMethodBuilder。 (并删除async ctp dll引用)

这是唯一的方法.net4,vs 2010中的任何非异步CTP异步实现,没有安装vs 2012,net 4.5或KB2468871都可以。

在.net4上任何其他现成的async实现都使用了在编译过程中实现和桥接异步代码的新方法,这就是你需要安装异步CTP的原因,它是.net4唯一的异步实现,修改csc编译器以支持它。

Microsoft已经改变了编译器在c#5和.net 4.5中使用的类型来生成异步代码,基本上它们可以轻松地为.net4完成,但是他们选择强制任何人安装vs 2012和.net 4.5,这对于需要支持xp用户的公司来说是不可接受的,因为你无法查看和修复.net 4.5中修复的任何.net 4错误。

Microsoft.Bcl.Async,AsyncTargetingPack,AsyncBridge如果没有安装.net 4.5或KB2468871用于.net 4.0,它们都不会工作。

如果您自己实现AsyncTaskMethodBuilder和AsyncVoidMethodBuilder,它们将全部工作,您甚至可以从async ctp v3复制/粘贴它的实现,并进行微小的更改,它将起作用。

因此,如果您真的关心部署要求以及与支持xp用户相关的其他事情,我强烈建议我这样做。

答案 2 :(得分:0)

发行说明详情:

  

在定位以下任何平台(或更高版本)时:

• .NET Framework 4.0 (with KB2468871)

因此,这意味着您'目标'为4.0 w / KB2468871,因为KB2468871必须部署在目标计算机上才能支持该库。

没有详细说明Microsoft.Bcl.Async需要KB2468871的哪些部分。我建议您联系BCL团队,发布到博客,或联系Nuget包裹所有者了解更多详情。我不清楚知道KB需要哪些部分会产生什么影响......

答案 3 :(得分:0)

可以使用不带KB2468871的AsyncBridge便携式设备来获得异步/等待功能。 https://www.nuget.org/packages/AsyncBridge.Portable/