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

时间:2012-07-11 08:07:11

标签: 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中不起作用,而我在两者中都针对相同的框架版本。

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

1 个答案:

答案 0 :(得分:2)

是的,有区别。使用的C#编译器是不同的。见VS2008 targeting .NET 2.0 doesn't stop me from using C# 3 features。注意:这与多目标使用Visual C ++的方式不同,后者在定位时使用旧版本的完整工具链。

我遇到的问题是foreach变量的生命周期范围不同。我在委托中捕获变量,而在VS 2012中,每个委托都捕获了自己的变量版本in VS 2010 it did not

VS 2012正在使用C#5编译器,它实现了新的行为。更改记录在Visual C# Breaking Changes in Visual Studio 2012 RC中。它也在What else is new in C# 5?Lifting ForEach, Breaking Change in Visual Studio 2012中进行了描述。