2012-10-22 53 views
5

Bạn tôi vừa gửi cho tôi dự án VS2010 với 2 giải pháp trong đó: một với một tệp CPP và giải pháp khác với dự án C# WPF (một XAML và một CS). Mọi thứ đang hoạt động tốt trên máy tính của anh ấy với VS2010. Khi anh ta xây dựng và thực thi dự án, cửa sổ XAML chính xuất hiện như đã cho.Dự án Visual Studio 2010 cho Visual Studio 2012

Khi tôi cố gắng thực hiện tương tự với VS2012 trên máy tính của mình, tôi không gặp vấn đề gì khi xây dựng dự án. Tuy nhiên, khi tôi chạy nó, không có gì xảy ra. Tôi đã thêm một số điểm ngắt vào mã C# và tôi nhận ra rằng mã chạy, nhưng cửa sổ không bao giờ xuất hiện. Vì vậy, ngay sau khi mã đã được thực hiện, ứng dụng chỉ cần thoát khỏi thay vì chờ người dùng nhập vào trong giao diện XAML.

Tôi chưa bao giờ gặp vấn đề này trước đây, thường từ VS2010 đến VS2012 hoạt động khá tốt. Và ở đây một lần nữa, mọi thứ dường như hoạt động ... ngoại trừ cửa sổ XAML hiện đang hiển thị khi chạy dự án, điều này khá khó chịu.

Có ai biết bất kỳ điều gì đang xảy ra ở đó không? Tôi có thể thiếu một cái gì đó thực sự tài trợ ở đây, nhưng tôi không thấy bất kỳ thiết lập trong tài sản của dự án hoặc giải pháp mà thực sự có thể giúp tôi để đảm bảo cửa sổ XAML chạy khi tôi bắt đầu dự án.

+0

Đáng chú ý, VS 2012 cài đặt .NET 4.5 là bản nâng cấp .NET. Có thể có một lỗi khiến ứng dụng của bạn bị hỏng. Có bất kỳ bộ tiền xử lý không mặc định nào được xác định không? – PrimeNerd

+0

Tôi đã xem xét khung mục tiêu và nó vẫn là 4.0. Tôi đã thử 3,5 chỉ để chắc chắn và nó không giúp đỡ. Tôi sẽ cố gắng khởi động lại dự án từ đầu, nhưng điều đó sẽ mất một thời gian để làm. Tôi không hiểu tại sao Microsoft tiếp tục tạo ra những sản phẩm tương tác xấu với nhau. – dnLL

Trả lời

0

Một điều cần lưu ý là trình biên dịch 4.5 đã thay đổi ngữ nghĩa của lambdas trong vòng lặp foreach, vì vậy ứng dụng của bạn có thể đã vấp phải điều này. Xem ở đây: https://connect.microsoft.com/VisualStudio/feedback/details/732657/c-5-compiler-doesnt-respect-the-semantics-of-the-foreach-range-variable-when-langversion-5

về cơ bản nếu bạn có một cái gì đó như thế này:

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

sẽ cho một kết quả khác nhau tùy thuộc vào việc nó được biên soạn với 4.0 hoặc 4.5. Chúng tôi kinda vấp qua điều này bởi vì máy xây dựng của chúng tôi vẫn còn 4.0 và chúng tôi nâng cấp máy phát triển của chúng tôi lên VS 2012.

+1

Mã của bạn không biên dịch trên tất cả các trình biên dịch. Nếu nó là 'List actions = new List ();'? – linquize

+0

Kết quả: điều này có đúng không? Trình biên dịch .NET 4 {30, 30, 30}; Trình biên dịch .NET 4.5 {10, 20, 30} – linquize

+0

có, nên. Về cơ bản trên 4.0, lambda sẽ tham chiếu phạm vi biến tương tự, trong 4.5 trình biên dịch tạo ra một phạm vi mới cho mỗi lần lặp. –

Các vấn đề liên quan