2012-10-22 74 views
5

Arkadaşım bana iki çözüm içeren bir VS2010 projesi gönderdi: biri tek bir CPP dosyası ve bir C# WPF projesiyle bir başka çözüm (bir XAML ve bir CS). Her şey onun bilgisayarında VS2010 ile iyi çalışıyor. Projeyi oluşturup yürütürken, ana XAML penceresi varsayıldığı gibi görünür.Visual Studio 2012 projesine Visual Studio 2012

Bilgisayarımda VS2012 ile aynı şeyi yapmaya çalıştığımda, projeyi oluştururken sorun yaşıyorum. Ancak, çalıştırdığımda hiçbir şey olmaz. C# koduna bazı kesme noktaları ekledim ve kodun çalıştığını fark ettim, ancak pencere hiç görünmeyecek. Bu nedenle, kod yürütüldüğü zaman, uygulama XAML arabiriminde kullanıcı girdisini beklemek yerine çıkar.

Bu problemi daha önce hiç karşılaşmadım, genellikle VS2010'dan VS2012'ye geçiyorum. Ve yine burada, her şey işe yarayacak gibi görünüyor ... projeyi yürütürken gösterilen XAML penceresi dışında, bu oldukça can sıkıcı bir durum.

Orada neler olduğuna dair herhangi bir fikri olan var mı? Muhtemelen buralarda gerçekten fikiri olan bir şeyi özlüyorum, ama projeye başladığımda XAML penceresinin çalışmamasını sağlamak için bana yardımcı olabilecek çözüm veya projenin özelliklerinde herhangi bir ayar göremiyorum.

+0

Bu, VS 2012, .NET 4. 0'ın bir yükseltme olduğunu .NET 4.5 yükler. uygulamanızın bozulmasına neden olan bir hata. Varsayılan olmayan önişlemciler tanımlanmış mı? – PrimeNerd

+0

Hedef çerçeveye baktım ve hala 4.0. Emin olmak için 3.5'ü denedim ve yardım etmedi. Projeyi sıfırdan yeniden başlatmayı deneyeceğim, ancak yapılması biraz zaman alacak. Microsoft'un neden birbiriyle çok kötü etkileşimde bulunan ürünler üretmeye devam ettiğini anlamıyorum. – dnLL

cevap

0

Dikkat edilmesi gereken bir nokta, 4.5 derleyicisinin foreach döngülerindeki lambdaların anlamlarını değiştirmesidir, bu nedenle uygulamanız bunu aşmış olabilir. Buraya bakın: https://connect.microsoft.com/VisualStudio/feedback/details/732657/c-5-compiler-doesnt-respect-the-semantics-of-the-foreach-range-variable-when-langversion-5

böyle bir şey vardı temelde eğer:

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

o 4.0 veya 4.5 ile derlendi olmadığına bağlı farklı bir sonuç verecekti. Biz bu yüzden bizim yapı makine hala 4.0 oldu ve biz geliştirme makinelerimizi VS 2012'ye yükseltilmişti.

+1

Kodunuz tüm derleyicilerde derlenmiyor. Listeleri olmalıdır = yeni Liste (); '? – linquize

+0

Sonuç: Bu doğru mu? .NET 4 derleyicisi {30, 30, 30}; .NET 4.5 derleyicisi {10, 20, 30} – linquize

+0

evet olmalıdır. Temel olarak 4.0'da, lambda aynı değişken kapsamını referans alırken, 4.5'de derleyici her yineleme için yeni bir alan yaratır. –

İlgili konular