2012-10-22 84 views
5

我的朋友刚刚给我发了一个VS2010项目,2个解决方案是:一个有一个CPP文件,并用C#WPF项目(一个XAML和一个CS)的其他解决方案。一切工作正常与他的电脑VS2010。当他构建并执行该项目时,主XAML窗口会按照假设显示。的Visual Studio 2010项目到Visual Studio 2012

当我尝试做VS2012一样在我的电脑上,我没有问题,建设该项目。但是,当我运行它时,没有任何反应。我在C#代码中添加了一些断点,我意识到代码可以运行,但窗口永远不会显示。因此,只要代码执行完毕,应用程序就会退出,而不是等待XAML界面中的用户输入。

我从来没有正视这个问题,通常是从VS2010到VS2012会工作得很好。在这里,一切似乎都奏效了......除了运行项目时现在显示的XAML窗口,这非常烦人。

有没有人发生了什么事情有任何想法?我可能在这里错过了一些真正的基金,但是我没有看到解决方案或项目属性中的任何设置,这些设置实际上可以帮助我确保在启动项目时运行XAML窗口。

+0

值得一提的,VS 2012安装.NET 4.5这是.NET 4的就地升级有可能是一个导致您的应用程序崩溃的错误。是否定义了任何非默认的预处理器? – PrimeNerd

+0

我看了一下目标框架,它仍然是4.0。我试过3.5只是为了确定,它并没有帮助。我会尝试从头开始重新启动项目,但这需要一些时间来完成。我不明白为什么微软一直在制造与彼此之间的交互如此糟糕的产品。 – dnLL

回答

0

有一点要注意的是,4.5编译器已经改变了foreach循环lambda表达式的语法,所以你的应用程序可能会绊倒了这一点。在这里看到: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

+1

您的代码无法在所有编译器上编译。应该是'List actions = new List ();'? – linquize

+0

结果:这是真的吗? .NET 4编译器{30,30,30}; .NET 4.5编译器{10,20,30} – linquize

+0

是的,应该是。基本上在4.0上,lambda会引用相同的变量作用域,在4.5中,编译器为每次迭代创建一个新的作用域。 –

相关问题