Visual Studio 2010 项目到 Visual Studio 2012

Posted

技术标签:

【中文标题】Visual Studio 2010 项目到 Visual Studio 2012【英文标题】:Visual Studio 2010 project to Visual Studio 2012 【发布时间】:2012-10-22 00:28:23 【问题描述】:

我的朋友刚刚给我发了一个 VS2010 项目,其中包含 2 个解决方案:一个包含一个 CPP 文件,另一个包含一个 C# WPF 项目(一个 XAML 和一个 CS)。使用 VS2010 在他的计算机上一切正常。当他构建并执行项目时,XAML 主窗口按预期显示。

当我尝试在我的计算机上对 VS2012 执行相同操作时,构建项目没有问题。但是,当我运行它时,什么也没有发生。我在 C# 代码中添加了一些断点,我意识到代码可以运行,但窗口从未出现。因此,一旦代码执行完毕,应用就会退出,而不是在 XAML 界面中等待用户输入。

我以前从未遇到过这个问题,通常从 VS2010 转到 VS2012 效果很好。在这里,一切似乎都正常工作......除了现在在运行项目时显示的 XAML 窗口,这很烦人。

有人知道那里发生了什么吗?我可能在这里遗漏了一些真正重要的东西,但我没有看到解决方案或项目属性中的任何设置实际上可以帮助我确保在我启动项目时运行 XAML 窗口。

【问题讨论】:

值得注意的是,VS 2012 安装了 .NET 4.5,它是 .NET 4 的就地升级。可能存在导致您的应用程序崩溃的错误。是否定义了任何非默认预处理器? 我看了一下目标框架,它仍然是4.0。我尝试了 3.5 以确保它没有帮助。我将尝试从头开始重新启动项目,但这需要一些时间。我不明白为什么微软一直在制造相互之间互动如此糟糕的产品。 【参考方案1】:

需要注意的一点是,4.5 编译器已经改变了 foreach 循环中 lambdas 的语义,因此您的应用程序可能会遇到这种情况。见这里:https://connect.microsoft.com/VisualStudio/feedback/details/732657/c-5-compiler-doesnt-respect-the-semantics-of-the-foreach-range-variable-when-langversion-5

基本上如果你有这样的东西:

List<Action<int>> actions = new List<Action<int>>();
foreach (var x in new[]  10, 20, 30 )

   actions.Add(() => Console.WriteLine("x = 0", x);


actions.ForEach(a => a());

会给出不同的结果,具体取决于它是用 4.0 还是 4.5 编译的。我们有点绊倒了,因为我们的构建机器仍然是 4.0,我们将开发机器升级到 VS 2012。

【讨论】:

您的代码无法在所有编译器上编译。应该是List&lt;Action&gt; actions = new List&lt;Action&gt;(); 结果:这是真的吗? .NET 4 编译器 30, 30, 30 ; .NET 4.5 编译器 10, 20, 30 是的,应该是。基本上在 4.0 中,lambda 将引用相同的变量范围,在 4.5 中,编译器为每次迭代创建一个新范围。 我最终从头开始了一个新项目,现在它可以工作了。我会接受你的回答来结束这个话题。这种情况很烦人,因为当项目编译器的版本设置为比安装的版本更高时,基本上没有办法更改项目编译器的版本(例如 .NET 3.5、4.0 或 4.5)(Visual Studio 只是告诉你安装更新的.NET 框架版本,然后关闭项目)。 过去,我们避免写这样的东西,因为 lambda 中 x 的值不是常数。

以上是关于Visual Studio 2010 项目到 Visual Studio 2012的主要内容,如果未能解决你的问题,请参考以下文章

如何将 HtmlAgilityPack 添加到 Visual Studio 2010 项目

将 gui 添加到 c++ 项目 (visual studio 2010)

在 Visual Studio 2010 上将静态库链接到我的项目

Visual Studio 2010 数据库项目数据

使用带有 fftw3 Visual Studio 2010 的 openCV 的链接器错误

Visual Studio 2010 挂起附加到进程/调试