2010-10-17 28 views
14

Ứng dụng của chúng tôi được xây dựng với VS 2008, sử dụng LINQ và có Khung mục tiêu được đặt thành .NET Framework3.5.Cách buộc ứng dụng sử dụng .NET 3.5 trở lên?

Nó hoạt động OK khi chỉ .NET 3.5 hoặc 4 được cài đặt trên máy.

Tuy nhiên, trên máy có cả .NET 2 (hoặc 3.0) và .NET 4 được cài đặt, ứng dụng được tải với .NET 2 và treo khi LINQ được truy cập, vì nó tìm thư viện .NET 3.5.

Sử dụng thẻ trong app.config dường như không hữu ích vì nó chỉ định phiên bản CLR, là 2 trong trường hợp .NET 3.5.

Lưu ý rằng cài đặt của chúng tôi xác minh rằng .NET 3.5 trở lên được cài đặt.

Có cách nào để nói với các ứng dụng để tải:

  • các CLR cao nhất nó tìm thấy, hoặc
  • CLR 4 nếu nó được cài đặt, và CLR 2 nếu CLR 4 chưa được cài đặt hoặc
  • CLR 2 nếu .NET 3.5 được cài đặt và CLR 4 nếu .NET 3.5 chưa được cài đặt

(Lưu ý rằng câu hỏi tương tự còn lại chưa được trả lời trong the Community Content section of the Element documentation)

Trả lời

13

Hình thành các câu hỏi dẫn tôi đến câu trả lời. Như đã đề cập trong the Element documentation,

Khi nhiều phiên bản của bộ thực thi được hỗ trợ, yếu tố đầu tiên nên xác định các phiên bản ưa thích nhất của bộ thực thi, và yếu tố cuối cùng cần xác định phiên bản tối thiểu được ưu tiên.

Vì vậy, cách để đạt được các tùy chọn thứ hai ("CLR 4 nếu nó được cài đặt, và CLR 2 là CLR 4 không được cài đặt") là để đảo ngược thứ tự của các yếu tố trong app.config:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <startup useLegacyV2RuntimeActivationPolicy="true"> 
     <supportedRuntime version="v4.0"/> 
     <supportedRuntime version="v2.0.50727"/> 
    </startup> 
</configuration> 

Bằng cách này, .NET 4 sẽ được tải nếu được cài đặt và phiên bản cũ hơn sẽ được tải nếu không.

+1

Bạn không thể gỡ lỗi với thiết lập này - nó đưa ra lỗi và .NET 4 không được hỗ trợ bởi VS2008. Nó hoạt động OK cho chạy bản phát hành xây dựng bên ngoài VS mặc dù. – ChrisF

+0

Tôi đã có kinh nghiệm với các ứng dụng không khởi động được nếu phần tử không nằm ở cuối tệp (ngay trước), trên Framework v3.5 ít nhất. Giá trị cố gắng di chuyển phần cấu hình này về phía cuối tệp nếu bạn gặp sự cố khởi động. – SteveWilkinson

+0

Nếu tôi chỉ để lại v4.0 dưới dạng SupportedRuntime và trong hệ thống chỉ có v4.5 thì nó sẽ vẫn chưa được sao? Làm thế nào để buộc chỉ sử dụng một phiên bản? – Kamilos

-1

Nếu bạn có một EXE không được quản lý gọi là .NET DLL, bạn cũng cần phải tạo một tệp foo.exe.config, có chứa khối <startup>... ở trên.

0

Một liên kết hữu ích khác là this page trên MSDN. Điều này cho thấy tất cả các giá trị được yêu cầu trong app.config nếu bạn muốn chỉ nhắm mục tiêu hồ sơ khách hàng hoặc nếu bạn yêu cầu cấu hình đầy đủ.

0

.NET Framework phiên bản 3.0 và 3.5 sử dụng phiên bản 2.0.50727 của CLR.

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