1

我有一个使用 .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 版本?

4

1 回答 1

2

是,有一点不同。使用的 C# 编译器不同。请参阅面向 .NET 2.0 的 VS2008 并不能阻止我使用 C# 3 功能。注意:这与 Visual C++ 中多目标的工作方式不同,后者在目标时使用旧版本的完整工具链。

打击我的问题是 foreach 变量的不同生命周期范围。我在委托中捕获变量,而在 VS 2012 中,每个委托都捕获了自己的变量版本,而在 VS 2010 中却没有

VS 2012 使用的是 C# 5 编译器,它实现了新的行为。此更改记录在Visual C# Breaking Changes in Visual Studio 2012 RC中。C# 5 还有哪些新功能?或提升 ForEach,Visual Studio 2012 中的重大变化

于 2012-07-11T09:14:57.753 回答