12

Tôi đã cài đặt VS2010 và VS2012 trên máy tính của mình và có Khuôn khổ .NET 4.0 mà sau đó tôi đã nâng cấp lên .NET Framework 4.5. Tuy nhiên, tôi vẫn đang phát triển các ứng dụng cần phải làm việc trên .NET Framework 4.0. Dự án nói rằng nó đang nhắm mục tiêu .NET Framework 4 (Client Profile), các assembly thậm chí còn trỏ tới thư mục .NET Framework 4.0 trong Assemblies được tham chiếu. Vấn đề xảy ra khi tôi chuyển ứng dụng này sang máy chỉ có 4.0 nó sẽ không khởi động và phát hiện ra lỗi ngay lập tức là một ngoại lệ do WindowState={Binding WindowState} mà bạn không thể thực hiện trong 4.0 nhưng bạn có thể ở 4.5. Tôi cần điều này để ném ngoại lệ vào hộp phát triển của tôi, tại sao không? Giả định của tôi là mặc dù những nỗ lực tốt nhất của tôi là nó sử dụng 4,5 dll nếu chúng tồn tại. Làm thế nào tôi có thể làm cho nó thực sự sử dụng 4.0 mà không cần gỡ bỏ cài đặt 4.5?Nhắm mục tiêu Khuôn khổ .NET 4 khi Khung 4.5 được cài đặt

Cập nhật

Để repro này cài đặt .NET Framework 4.5 và tạo ra một mục tiêu .NET Framework 4.0 dự án WPF. Liên kết WindowState với một thuộc tính trong máy ảo hoặc mã phía sau làm cho thuộc tính này có một bộ nhận công khai và riêng. .NET Framework 4.5 xử lý việc này ngay cả khi Mode = TwoWay phải bỏ qua tập hợp .NET Framework 4 không và ném một ngoại lệ: "Một liên kết TwoWay hoặc OneWayToSource không thể làm việc trên thuộc tính chỉ đọc" Trạng thái "của kiểu .. ". Trên hộp với .NET Framework 4.5 hoạt động giống như một nét duyên dáng, hãy thử nó trên một máy tính với chỉ .NET Framework 4.0 và nó thổi lên ... Vì vậy, bất kỳ ý tưởng về làm thế nào để thực sự nhắm mục tiêu 4,0 khi 4.5 được cài đặt?

Báo cáo lỗi cho MS tại đây: https://connect.microsoft.com/VisualStudio/feedback/details/774694/targeting-net-framework-4-0-when-4-5-doesnt-seem-to-work

+0

Nếu bạn đang nhắm mục tiêu .NET 4.0, thì tại sao bạn có mã sử dụng thứ gì đó chỉ hoạt động trong .NET 4.5? –

+2

Giả sử đó là chính xác (tôi nghi ngờ nó), nó không ném một ngoại lệ trên hộp dev của bạn bởi vì bạn không còn có cài đặt .NET 4.0. .NET 4.5 đã thay thế nó. –

+0

@ John: Anh ấy không biết nó chỉ hoạt động trong 4.5. Anh ta muốn ngoại lệ xảy ra ngay cả khi người dùng tình cờ cài đặt .NET 4.5. – Cameron

Trả lời

3

Thời gian để thực hiện câu hỏi này. Tôi không có chuyên gia về WPF, không thích nó nhiều cho chính xác các loại vấn đề, gỡ lỗi vấn đề tài sản phụ thuộc là một cơn ác mộng. Nhưng tôi khá thuyết phục rằng bạn đang theo đuổi một con ma. WindowState đã là một thuộc tính phụ thuộc tất cả các con đường trở lại 3.0, không có gì đặc biệt xảy ra với nó trong 4.5 mà tôi có thể nhìn thấy hoặc bao giờ nghe nói về.

Bạn nhận được một số loại thông báo lỗi mà không ai có thể thấy điều đó đã thuyết phục bạn rằng nó có liên quan đến việc ràng buộc. Tôi đến từ Missouri, bang Show Me. Vâng, đủ gần với Wisconsin.

Dành nhiều thời gian làm việc trên mã cung cấp cho bạn thông báo ngoại lệ đáng tin cậy và theo dõi ngăn xếp giúp bạn chẩn đoán lỗi trên máy mà bạn triển khai, máy không có trình gỡ rối để giúp bạn tìm ra điều gì đang xảy ra. Bạn làm như vậy bằng cách viết một trình xử lý sự kiện cho sự kiện AppDomain.CurrentDomain.UnhandledException. Đăng nhập hoặc hiển thị giá trị trả về e.ExceptionObject.ToString(). Nó cung cấp cho bạn thông điệp ngoại lệ và Dấu vết ngăn xếp của Holy. Nếu điều đó không giúp bạn hãy cập nhật câu hỏi của bạn với những gì bạn đã thấy.

+0

Tôi không thể có được điều này để repo trong một dự án mẫu, do đó, đoán nó phàn nàn về trạng thái cửa sổ là kết quả của cái gì khác nhưng trên hộp dev nó hoạt động tốt. Ném một ngoại lệ trên một hộp kiểm tra nhưng nếu tôi cài đặt .NET Framework 4.5 trên hộp kiểm tra hoạt động tốt. Vì vậy, có hành vi khác nhau rõ ràng giữa .NET Framework 4.0 và .NET Framework 4.5. – user1914199

+1

Tôi khá rõ ràng về thái độ Show Me State. Tôi đã giải thích những gì bạn cần làm để hiển thị nó. Vẫn không thấy gì cả. Cho tôi xem. –

+0

Đây thực sự là một lỗi mà chúng tôi quản lý để tái sản xuất trong nhóm phát triển của chúng tôi. chắc chắn tồn tại. – MaYaN

0

Bạn đã nói rằng bạn không thể sao chép điều này trong dự án thử nghiệm. Vì vậy, điều đó ngụ ý rằng nó có thể là một cái gì đó mà nên làm việc tốt trong 4,0 phải không? Bạn có thể có một số kết hợp mã đang bị lỗi trên một lỗi trong 4.0, đã được sửa trong 4.5. Khi bạn nhắm mục tiêu 4.0, bạn sẽ chỉ nhận được cảnh báo khi bạn cố gắng sử dụng API/tính năng mà trình biên dịch có thể xác định không được hỗ trợ trong 4.0.

Điều gì đó sẽ hoạt động trong 4.0 có thể bị lỗi do một số lỗi hiếm thấy, và sau đó được khắc phục trong 4.5. Khi ứng dụng được nhắm mục tiêu 4.0 của bạn chạy trong môi trường 4.5, nó sẽ bị ảnh hưởng bởi các bản sửa lỗi cho các tính năng đã tồn tại trong 4.0.

Có thể có bản cập nhật cho 4.0 bao gồm sửa lỗi, để không yêu cầu nâng cấp 4.5 nếu người dùng bất lợi vì lý do nào đó. Vì vậy, nó có thể thậm chí không phải là một sự thay đổi 4,5, nhưng chỉ đơn giản là một sự trùng hợp ngẫu nhiên mà một số người dùng không có tất cả các bản cập nhật có sẵn cho 4.0 (mà có thể đã được tích luỹ bao gồm trong 4.5 của bạn).

Loại trường hợp tôi hiếm khi gặp phải, nhưng đôi khi xảy ra và là lý do những người hỗ trợ ứng dụng .NET dành cho máy tính để bàn nổi tiếng vì yêu cầu người dùng cập nhật ở đó. khắc phục sự cố thời gian.

Đôi khi điều ngược lại xảy ra. Mã của bạn chỉ hoạt động do một số lỗi hoặc hành vi kém của .NET API, và sau đó cập nhật làm sạch điều này, có lẽ thắt chặt an ninh ở đâu đó là điều thường thấy nhất và mã của bạn đột nhiên bị hỏng do cập nhật phiên bản nhỏ của .NET.

+0

Xem cập nhật về câu hỏi, tôi đã có thể tái tạo nó trong một dự án thử nghiệm và nó không có cảnh báo rằng nó sẽ không làm việc cho .NET 4.0 (nhưng suy nghĩ tốt). Ràng buộc vào một tài sản chỉ đọc có vẻ khá quan trọng bạn sẽ nghĩ rằng họ sẽ bắt được điều này. Bạn có thể nhận dự án thử nghiệm bằng cách theo liên kết tới lỗi MS và nhúng phần đính kèm. – user1914199

+0

Nó sẽ rất tốt đẹp nếu Run/Debug Project từ Visual Studio sẽ sử dụng một số loại ảnh chụp nhanh .NET runtime cho phiên bản được nhắm mục tiêu đó. Tuy nhiên, nhắm mục tiêu không có ý định làm điều đó. Một số điều đơn giản là không thể bị bắt bởi trình biên dịch. Khi nhắm mục tiêu một khuôn khổ cụ thể, nó chỉ có thể nắm bắt những thứ như sử dụng một API, loại, quá tải chức năng cụ thể, vv mà không tồn tại trong phiên bản đó. Trình biên dịch không thể chạy mã và xem nếu nó đi xuống một con đường mà sẽ ném một ngoại lệ. Cùng các dòng tương tự, các biến đổi cấu hình không có ảnh hưởng trong khi Chạy/Gỡ lỗi khiến chúng khó kiểm tra: ( – AaronLS

0

Net 4.5 Thay thế Net 4.0 với, thư viện mới cùng tên, mà thực sự có một số bản sửa lỗi. Đó là câu trả lời ngắn.

Không giống như các phiên bản trước đó, cập nhật .net 4 đến 4.5 thay thế tệp, thay vì thêm các tệp cạnh nhau. Thậm chí nếu bạn có thư mục như thế này Windows/Microsoft.Net/Framework/v40 /, Sau khi cập nhật, có một sự thay đổi trong thư mục này. Các tệp được thay đổi, một số lỗi đã được xử lý trong .net mà không có sự lo ngại của nhà phát triển.

Cách nhắm mục tiêu 4.0 khung sử dụng .net 4.5? tôi vẫn không biết, nhưng tôi vẫn đang đào

Đề nghị đọc về chủ đề này:

Scott Hanselman: http://www.hanselman.com/blog/NETVersioningAndMultiTargetingNET45IsAnInplaceUpgradeToNET40.aspx

Rick Strahl: http://weblog.west-wind.com/posts/2012/Mar/13/NET-45-is-an-inplace-replacement-for-NET-40

Và vấn đề tương tự, tạo bởi tôi: https://stackoverflow.com/questions/26483168/errors-on-net-4-0-dont-appear-on-net-4-5

0

Giải pháp:

Tôi đã có cùng một vấn đề khi cài đặt VS2017 sau VS2015: Framework 4.0 chỉ biến mất khỏi danh sách mục tiêu của dự án.

Làm theo một số nhận xét xung quanh ở đây tôi đã thử với gói NuGet: Microsoft.CodeDom.Providers.DotNetCompilerPlatform 1.0.4 và sửa lỗi cho 1.0.1.

Đừng làm điều đó! Thời gian xây dựng của tôi đã tăng ~ 300% cho cùng một dự án. Đó là thảm họa.

Tôi thấy rằng 4.5 là "thay thế tại chỗ" cho 4.0 Tuy nhiên điều này không giải thích tại sao tôi không thể thấy cả hai tùy chọn trong kết hợp khung mục tiêu của mình.

Tôi đã đọc cùng một câu thần chú trên toàn bộ web. Nó chỉ đơn giản là không trả lời cho vấn đề. Khung 4.0 là phải là cho bất kỳ phần mềm liên quan đến máy móc công nghiệp nào - vì nó chạy trên Windows XP, trong khi .NET 4.5. là vô ích trong kịch bản của tôi, và có lẽ cho nhiều công cụ thực tế khác.

Các giải pháp rất đơn giản: Bạn chỉ cần tải về và cài đặt Visual Studio 2013 nhanh từ trang web chính thức: https://www.microsoft.com/en-us/download/details.aspx?id=44914

Sau khi cài đặt nó, chỉ cần mở của bạn VS2015 và bạn sẽ thấy 4.0 một lần nữa.

enter image description here

... "Ở vị trí thay thế ..." của tôi ....


này được tái đăng câu trả lời tôi đã về một câu hỏi trùng lặp. Tôi đang đăng bài ở đây vì luồng này được chú ý nhiều hơn và các câu trả lời hiện có ở đây không đưa ra giải pháp cho vấn đề này.

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