6

我正在尝试将一个项目重写到可移植类库中。但问题在于它使用的是Async CTP,并且我无法将其编译为WP和Windows应用商店应用的库。如果我不包括参考AsyncCtpLibrary.dll,编译器说,在便携式类库中使用异步CTP

类型或命名空间名称“任务”不存在命名空间“的System.Threading”存在(是否缺少程序集引用?)

如果我有它,编译器仍然说了同样的错误,并增加了一个警告:

主要参考“AsyncCtpLibrary”无法得到解决,因为它的框架组件的间接依赖“mscorlib程序,版本= 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5 c561934e089“,这在目前的目标框架中无法解决。 ” .NETPortable,版本= V4.0,外形= Profile104" 。要解决此问题,请移除引用“AsyncCtpLibrary”或将应用程序重定向到包含“mscorlib,版本= 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089”的框架版本。

我该怎么忍受?

回答

3

答案很简单 - AsyncCTP不工作Visual Studio 2012,不能用于任何项目。对于.NET 4.0和Silverlight 5,您可以从NuGet以类似的方式安装Async Targeting Pack。
异步/等待仅在针对WinRT,.NET4.5或Windows Phone 8支持的可移植类库中使用,即使这样使用也非常有限。我无法在此处详细了解,因为Windows Phone 8 SDK仍处于NDA之下。
对于WP7.5和VS2012,目前没有办法如何使用async/await,但更新的此平台的Async Targeting Pack应在某个时间可用。
另请注意,AsyncCTP和Async Targeting Pack无法在便携式类库中使用,并且不太可能在未来发生变化。结果是在VS2010中,您不能在便携式类库中使用async/await。

+0

因此,我应该为每个项目保留两个不同的类版本? – passick

+2

我在VS2010中解决了这个问题 - 我最终为我的应用程序逻辑创建了两个csproj文件,一个用于WinRT,另一个用于WP7.5。然后我在两个项目中引用相同的文件,我也使用像#if等条件构建变量。它工作得很好,但有一些限制。 –

+1

你还没有提到你可能参与了wp8sdk - 战斗俱乐部的第一条规则! :) – Stuart

1

您可以尝试使用AsyncBridge项目而不是AsyncCTP。我不知道这是否会有所帮助。你必须在VS2012编译得到这个工作,虽然(你仍然可以针对.NET4.0):

+0

有没有其他方法可以做到这一点?因为我正在使用vs2010在Windows 7下开发wp。 – passick

+1

你可以尝试在VS2012中编译需要异步支持的项目,然后在你的VS210项目中引用这些DLL – RoelF

5

当您定位.NET 4.5和Window Store应用程序时,您目前只能在便携式中使用async/await。在便携式之外,您可以使用.NET 4.0和Silverlight 5的Async Targeting Pack。

尽管如此,我们正在研究更新的异步定位包,该定位包在定位Phone 7.5时增加了对便携式中的异步/等待的支持,Silverlight 5和.NET 4.0,请参阅:http://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/2691068-support-async-in-portable-class-libraries。你会在十月初看到这个。

更新:我们刚刚发布了一个这样的测试版:http://blogs.msdn.com/b/bclteam/archive/2012/10/22/using-async-await-without-net-framework-4-5.aspx