2010-04-15 33 views
24

Có rào cản tương thích nào với mã hội nghị .NET 4.0 đang gọi trong một phiên bản .NET 2.0 không? Và ngược lại?Mã .NET 4.0 có thể tương thích với mã .NET 2.0 không?

Cụ thể hơn, tôi đang điều tra nâng cấp lên Visual Studio 2010 khi sử dụng ứng dụng của bên thứ ba dựa trên .NET 2.0. Ứng dụng có thể mở rộng bằng các móc tham chiếu đến mã tùy chỉnh của tôi. Và ngược lại, mã của tôi sẽ tham khảo các assembly của ứng dụng.

+1

Hãy xem [câu hỏi này] (http://stackoverflow.com/questions/1456785/a-definite-guide-to-api-breaking-changes-in-net). –

Trả lời

38

CLR, trong .NET 4, có thể tiêu thụ .NET 2 hội đồng và sử dụng chúng đúng cách.

Nếu bạn muốn ứng dụng .NET 2 của bạn có thể tải các hội đồng .NET 4, bạn sẽ cần định cấu hình nó theo cách khác. Bằng cách đặt requireRuntime thành .NET 4 và chính sách tải kế thừa, bạn sẽ có thể bắt buộc ứng dụng .NET 2 tải bằng CLR 4, cho phép sử dụng các assembly .NET 4 của bạn.

cài đặt file app.config bạn để bao gồm:

<?xml version="1.0"?> 
<configuration> 
    <startup useLegacyV2RuntimeActivationPolicy="true"> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/> 
    </startup> 
</configuration> 

Nói như vậy, trong một tình huống như thế này, tôi khuyên bạn nên chỉ sử dụng VS 2010 và nhắm mục tiêu NET 3.5 thay vì .NET 4. này sẽ biên dịch các assembly của bạn cho CLR 2, và tránh hoàn toàn vấn đề này.

+0

Giả định này, tất nhiên, bất kỳ máy chủ nào bạn đang chạy ứng dụng .NET 2.0 của bạn cũng đã cài đặt .NET 4.0. – cortijon

+2

@MrGrumbe: Tôi nghĩ đó là một giả định an toàn khi xem xét câu hỏi của OP. –

-3

Hội đồng .NET 4.0 có thể gọi hội đồng .NET 2.0 không gặp khó khăn. Tuy nhiên, rất khó bạn sẽ có thể gọi một hội đồng .NET 4.0 từ .NET 2.0 trừ khi assembly .NET 4.0 không tận dụng được bất kỳ tính năng khung công tác mới nào và bạn thiết lập các chuyển hướng assembly.

+0

... bạn đang nhận được cảnh báo so với nếu bạn đang cố gắng thực hiện điều này và có thể dẫn đến hành vi không mong muốn. – Beachwalker

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