2012-12-17 32 views
8

Tôi có ứng dụng .NET 2.0 và tôi dự định thực hiện 'trình cài đặt thông minh' để kiểm tra phiên bản .NET có sẵn trên máy tính của người dùng và cài đặt cổng cụ thể cho nó. tôi thấy rằng:Hoàn toàn hiểu các phiên bản .NET và khả năng tương thích ngược

  • Windows XP (SP2) đi kèm với .NET 2.0
  • Windows Vista đi kèm với .NET 3.0
  • Windows 7 đi kèm với .NET 3.5
  • Windows 8 đi kèm với .NET 4.5

Theo như tôi biết, điều duy nhất không tương thích ngược là phiên bản CLR, được thay đổi sau .NET 4.0.

Vì vậy, nếu tôi không muốn người dùng cài đặt thêm khuôn khổ chỉ dành riêng cho ứng dụng của tôi, tôi có nên có các phiên bản ứng dụng của tôi:

  • .NET 2.0 - XP (SP2 và phía trên), Vista (3.0 có thể chạy 2.0) và 7 (3.5 sẽ có thể chạy 2.0)
  • .NET 4.0 - nếu ai đó đã cài đặt 4.0 CHỈ và không có khác
  • .NET 4.5 - dành cho người dùng có Windows 8 với không có .NET nào khác được cài đặt

Tôi có đúng không? Hoặc 4.5/4.0 tương thích ngược?

EDIT: Nếu bất kỳ dữ liệu trên là không đúng, hãy sửa lại cho tôi

+2

Urgh. Bạn sẽ tạo một phiên bản ứng dụng khác cho mỗi phiên bản .NET có sẵn? Có vẻ như rất nhiều thời gian lãng phí và nỗ lực mã hóa.Tại sao không chỉ chọn mẫu số chung thấp nhất? – KingCronus

+0

Tôi sẽ không thay đổi một dòng, chỉ biên dịch lại cho 3 phiên bản khác nhau. Trình cài đặt web của tôi sẽ chọn trình cài đặt nào cần cài đặt. – blez

+2

Vì vậy, bạn sẽ không sử dụng bất kỳ tính năng .NET 3/3.5/4 + nào cả. Bạn cũng có thể chỉ có một phiên bản .NET 2 duy nhất theo ý kiến ​​của tôi? Lý do của bạn cho việc không muốn người dùng phải cài đặt một khung công tác là gì? Nó có vẻ hoàn toàn hợp lý trong quan điểm của tôi. – KingCronus

Trả lời

9

Theo như tôi biết, điều duy nhất đó là không tương thích ngược là phiên bản CLR, được thay đổi sau khi .NET 4.0.

Điều này không đúng. Bạn có thể làm cho ứng dụng được biên dịch .NET2 của bạn chạy trên khung công tác .NET4.

Bạn chỉ cần thêm dòng sau vào app.config của bạn:

<configuration> 
<startup> 
    <supportedRuntime version="v2.0.50727"/> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0,Profile=Client"/> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/> 
    </startup> 
</configuration> 

Lưu ý, tôi đồng ý với @KingKronus, tức là Why not just pick the lowest common denominator?

Trong trường hợp của bạn sẽ được biên soạn .NET2 và chỉ có một thiết lập pdbs và một bộ biên dịch.

Có, bạn sẽ cần phải kiểm tra ứng dụng .NET2 được biên dịch của bạn chạy OK trên thời gian chạy .net4 NHƯNG bạn sẽ cần phải thử nghiệm ứng dụng của mình trong từng khung công tác trong giải pháp gốc của bạn.

+0

Có điều tương tự không, nhưng đối với 4,5? Và điều đó làm việc cho 3,5 trên 4,0 dự án quá? – blez

+1

tôi đang kiểm tra ngay bây giờ ... điều tốt nhất là thử nó. xem thêm liên kết này: http://msdn.microsoft.com/en-us/library/ff602939.aspx 'Khuôn khổ .NET 4.5 tương thích ngược với các ứng dụng được xây dựng với .NET Framework phiên bản 1.1, 2.0, 3.0, 3.5 và 4.' – wal

+0

và có, điều đó cũng sẽ hoạt động trên 3,5 dự án; hãy nhớ rằng nó 'hoạt động' vì các dự án .net3.5 vẫn sử dụng thời gian chạy .net2 * – wal

0
  1. Trên thực tế bạn không cần phải kiểm tra nó bằng tay. Ứng dụng của bạn sẽ hiển thị thông báo thích hợp sau khi bạn chạy nó và yêu cầu người dùng tải xuống và cài đặt phiên bản cần thiết.

  2. Nếu bạn vẫn cần hỗ trợ Windows XP, hãy chọn .NET 4.0. NET 4.5 sẽ xử lý nó

+0

"Trên thực tế bạn không cần phải kiểm tra nó bằng tay. Ứng dụng của bạn sẽ hiển thị thông báo thích hợp sau khi bạn chạy nó và yêu cầu người dùng tải xuống và cài đặt phiên bản cần thiết." đó là sự thật chỉ trên Windows 8. – blez

+1

@blez Sai. Windows XP và Windows 7 cũng sẽ hiển thị cho bạn hộp thoại đó, tôi đã kiểm tra nó. Windows XP sẽ không nhận ra 4.5, nhưng 4.0 cho chắc chắn – VladL

+0

Tôi không muốn làm cho người dùng cài đặt toàn bộ khuôn khổ chỉ cho ứng dụng của tôi. – blez

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