我在我的机器上安装VS-SP1和Async CTP V3时遇到问题。由于某种原因,它导致我在该计算机上运行的任何.NET应用程序崩溃。 (好的,我正在使用虚拟机,我可以回滚)。
我将更新csc.exe文件复制到Windows目录中的.NET framework 4目录中。
当我从命令行使用msbuild构建我的项目时,一切都构建并且运行良好。
当我在VS2010中编译同一个项目时,我得到编译时错误,即async关键字未知。
我不在乎VS没有强调async和await的语法,但是我必须从命令行构建项目。
为什么命令行csc会起作用,但是在使用VS时却没有?
如何更改VS以正确编译异步代码(不安装Async CTP本身)?
谢谢,
伊多。
答案 0 :(得分:3)
VS2012和异步定位包是最佳选择,原因如下:
一个小的警告是在具有VS2010 + Async CTP的计算机上安装VS2012会破坏Async CTP。您将无法再使用VS2010版本来编译异步代码。
作为异步行为很重要的示例,请考虑以下非常简单的重试任务的方法。当函数使用Async CTP进行编译时,如果发生异常,将无法正常(如在应用程序终止时静默):
private static async Task<T> Retry<T>(Func<T> func, int retryCount)
{
while (true)
{
try
{
var result = await Task.Run(func);
return result;
}
catch
{
if (retryCount == 0)
throw;
retryCount--;
}
}
}
也就是说,我一直在使用Async CTP超过一年,唯一的问题是添加Visual Studio 2010 SP1后的安装顺序。如果订单错误,Asycn CTP将无法安装,您必须删除SP1并按正确顺序重新安装所有内容。
尽管如此,我会尽快转移到2012年和目标包(即整个团队已准备好切换),以避免多个代码版本和恼人的异常行为。