Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Visual Studio 2012.NET多目标和异步回调_C#_.net_Visual Studio_Visual Studio 2012_Multitargeting - Fatal编程技术网

C# Visual Studio 2012.NET多目标和异步回调

C# Visual Studio 2012.NET多目标和异步回调,c#,.net,visual-studio,visual-studio-2012,multitargeting,C#,.net,Visual Studio,Visual Studio 2012,Multitargeting,我有一个使用.NET Framework 3.5的.NET应用程序,它是用C#编写的。应用程序正在使用BeginInvoke异步调用委托。当使用Visual Studio 2012 RC编译时,应用程序工作正常,但当使用Visual Studio 2010 SP1编译时,应用程序会冻结(主线程卡在WaitOne中,等待异步委托完成,但它们从未执行) 虽然有可能是错误设计的同步错误,但令我惊讶的是,为什么它在VS 2012中工作,而在VS 2010中不工作,而我在这两个版本中的目标都是相同的框架版

我有一个使用.NET Framework 3.5的.NET应用程序,它是用C#编写的。应用程序正在使用BeginInvoke异步调用委托。当使用Visual Studio 2012 RC编译时,应用程序工作正常,但当使用Visual Studio 2010 SP1编译时,应用程序会冻结(主线程卡在WaitOne中,等待异步委托完成,但它们从未执行)

虽然有可能是错误设计的同步错误,但令我惊讶的是,为什么它在VS 2012中工作,而在VS 2010中不工作,而我在这两个版本中的目标都是相同的框架版本


如何在Visual Studio for.NET中实现多目标?当目标是相同的框架版本时,是否应该期望可执行行为相同,或者是否存在某些部分(编译器前端或运行库的某些部分),这取决于所使用的Visual Studio版本?

是的,存在差异。使用的C#编译器是不同的。看见注意:这与多目标与VisualC++的工作方式不同,在使用目标工具时,旧的工具链使用完整的工具链。 我遇到的问题是foreach变量的生命周期范围不同。我在一个代理中捕获变量,而在VS 2012中,每个代理都捕获了自己版本的变量


VS2012正在使用C#5编译器,它实现了新的行为。变更记录在中。or中也有描述。

为什么您对Microsoft悄悄修复了一个bug感到惊讶?您对此有什么微词吗?@DavidKean答案中已经给出了解释(foreach变量的不同范围),因此我对这个问题不再感兴趣。抱歉,我没有看到您回答了自己的问题。:)“我还没有发现新的行为是否被定义了。”——这是在官方页面上特别提到的,所以我认为这是定义的,直到我看到了另一个假设的理由。VS 2012默认使用C#5.0,而不是4.0,只是规范文档尚未更新。(据我所知,但我没有特别检查,该行为也是在C#4.0中定义的,但定义不同,因此所有符合C#4.0标准的编译器都必须重用
foreach
变量。)@hvd感谢澄清,更新答案。