.net 使用异步V3而不安装它

.net 使用异步V3而不安装它,.net,visual-studio-2010,visual-studio,async-ctp,async-await,.net,Visual Studio 2010,Visual Studio,Async Ctp,Async Await,在我的机器上安装VS-SP1和异步CTPV3时出现问题。由于某种原因,它会导致我在该机器上运行的任何.NET应用程序崩溃。(幸好我使用的是虚拟机,我可以回滚) 我已将更新csc.exe文件复制到Windows目录中的.NET framework 4目录中 当我从命令行使用msbuild构建项目时,一切都会构建并运行良好 当我从VS2010中编译同一个项目时,我得到编译时错误,异步关键字未知 我不在乎VS没有突出显示async和await的语法,但是我不得不从命令行构建项目,这确实让我很烦恼 为什

在我的机器上安装VS-SP1和异步CTPV3时出现问题。由于某种原因,它会导致我在该机器上运行的任何.NET应用程序崩溃。(幸好我使用的是虚拟机,我可以回滚)

我已将更新csc.exe文件复制到Windows目录中的.NET framework 4目录中

当我从命令行使用msbuild构建项目时,一切都会构建并运行良好

当我从VS2010中编译同一个项目时,我得到编译时错误,异步关键字未知

我不在乎VS没有突出显示async和await的语法,但是我不得不从命令行构建项目,这确实让我很烦恼

  • 为什么命令行csc可以工作,但当使用VS时却不能

  • 如何更改VS以正确编译异步代码(不安装异步CTP本身)

  • 谢谢,


    Ido.

    VS2012和异步目标包是最佳选择,原因如下:

  • 语法与C#5中的相同,使升级到C#5更容易。异步CTP有足够的差异(TaskEx代替了任务类,TaskAsync代替了任务后缀,令牌参数等),这使得升级成为一个麻烦。不难,只是讨厌而已
  • 等待/异步行为更好,更接近C#5。在异步CTP中,循环内部发生的异常将导致整个循环以静默方式失败。有关受此影响的场景,请参阅
  • 没有安装问题。异步CTP和VS2010SP1必须按照一定的顺序安装,以避免出现问题
  • 您可以期望MS对目标包提供某种支持,而对异步包则不提供任何支持 一个小警告是,在带有VS2010+异步CTP的机器上安装VS2012会破坏异步CTP。您将无法再使用VS2010版本编译异步代码

    作为异步行为很重要的一个例子,考虑以下非常简单的重试任务的方式。当函数使用异步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--;
            }
        }
    }
    
    private静态异步任务重试(Func-Func,int-retryCount)
    {
    while(true)
    {
    尝试
    {
    var result=wait Task.Run(func);
    返回结果;
    }
    抓住
    {
    如果(retryCount==0)
    投掷;
    重新计数--;
    }
    }
    }
    
    也就是说,我已经使用异步CTP一年多了,唯一的问题是添加VisualStudio2010SP1后的安装顺序。如果订单错误,Asycn CTP将不会安装,您必须删除SP1并按正确顺序重新安装所有内容


    尽管如此,我还是会在可行的情况下(即整个团队都准备好切换),尽快切换到2012和目标包,以避免出现多个代码版本和恼人的异常行为。

    为什么不改用VS2012呢?我对问题1的猜测是VS并没有真正打电话给
    csc
    ,但是通过编程方式从自己的DLL调用编译器。VS use MSBuild应该使用csc。我还将日志级别改为diagnostics,它表明它使用了正确的csc.exeAsync针对.Net 4的目标包对您不起作用?我不想进入目标包,但我想我别无选择。感谢您提供详细的答案。我想我现在要搬到VS2012了