2012-10-22 20 views
5

Mein Freund hat mir gerade ein VS2010-Projekt mit 2 Lösungen gesendet: eins mit einer CPP-Datei und die andere Lösung mit einem C# -WPF-Projekt (ein XAML und ein CS). Alles funktioniert auf seinem Computer mit VS2010. Wenn er das Projekt erstellt und ausführt, wird das XAML-Hauptfenster wie erwartet angezeigt.Visual Studio 2010-Projekt zu Visual Studio 2012

Wenn ich versuche, das gleiche mit VS2012 auf meinem Computer zu tun, habe ich kein Problem, das Projekt zu bauen. Wenn ich es jedoch ausführe, passiert nichts. Ich habe einige Breakpoints in den C# -Code eingefügt und festgestellt, dass der Code ausgeführt wird, aber das Fenster wird nie angezeigt. Sobald der Code ausgeführt wurde, wird die App beendet, anstatt auf Benutzereingaben innerhalb der XAML-Schnittstelle zu warten.

Ich habe dieses Problem nie zuvor gesehen, normalerweise von VS2010 zu VS2012 funktioniert ziemlich gut. Und auch hier scheint alles zu funktionieren ... außer dem XAML-Fenster, das jetzt beim Ausführen des Projekts angezeigt wird, was ziemlich nervig ist.

Hat jemand eine Ahnung von dem, was dort vor sich geht? Ich vermisse hier wahrscheinlich etwas wirklich Fundamentales, aber ich sehe keine Einstellung in den Eigenschaften der Lösung oder des Projekts, die mir tatsächlich helfen könnte sicherzustellen, dass das XAML-Fenster beim Starten des Projekts ausgeführt wird.

+0

Es ist erwähnenswert, VS 2012 installiert .NET 4.5, die ein In-Place-Upgrade von .NET 4 ist Ein Fehler, der dazu führt, dass deine App nicht mehr funktioniert. Sind nicht standardmäßige Präprozessoren definiert? – PrimeNerd

+0

Ich habe mir das Zielframework angeschaut und es ist immer noch 4.0. Ich habe 3.5 versucht, nur um sicher zu sein, und es hilft nicht. Ich werde versuchen, das Projekt von Grund auf neu zu starten, aber das wird einige Zeit dauern. Ich verstehe nicht, warum Microsoft weiterhin Produkte herstellt, die so schlecht miteinander interagieren. – dnLL

Antwort

0

Eine Sache zu beachten ist, dass der 4.5-Compiler die Semantik von Lambdas in foreach-Schleifen geändert hat, so dass Ihre Anwendung darüber gestolpert sein könnte. Siehe hier: https://connect.microsoft.com/VisualStudio/feedback/details/732657/c-5-compiler-doesnt-respect-the-semantics-of-the-foreach-range-variable-when-langversion-5

im Grunde, wenn Sie so etwas wie dies haben:

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()); 

wäre ein anderes Ergebnis geben, je nachdem, ob es mit 4.0 oder 4.5 kompiliert wurde. Wir stolperten irgendwie darüber, weil unsere Build-Maschine noch 4.0 war und wir unsere Entwicklungsmaschinen auf VS 2012 aktualisierten.

+1

Ihr Code kompiliert nicht auf allen Compilern. Sollte es 'List Aktionen = neue Liste ();'? – linquize

+0

Ergebnis: Ist das wahr? .NET 4-Compiler {30, 30, 30}; .NET 4.5 Compiler {10, 20, 30} – linquize

+0

ja, sollte sein. Bei 4.0 würde das Lambda den gleichen Variablenbereich referenzieren, in 4.5 erstellt der Compiler für jede Iteration einen neuen Bereich. –

Verwandte Themen