2008-10-14 27 views
5

Có hai kịch bản tôi cần phải làm rõ:Có thể tải hai phiên bản của thời gian chạy .NET trong cùng một quy trình không?

  1. Một thực thi biên soạn với .NET 3.5 nhu cầu sử dụng một thư viện biên soạn với .NET 1.1 và thư viện phải chạy trên runtime 1.1.

  2. Tệp thực thi được biên dịch với .NET 1.1 cần sử dụng thư viện được biên dịch với .NET 3.5.

Tôi không thể tìm thấy nguồn đáng tin cậy cho biết không thể tải hai phiên bản .NET runtime và tài liệu của Microsoft rất mơ hồ về vấn đề này.

Trả lời

7

Không - bạn không thể tải CLR vào cùng một quá trình hai lần. Xem tài liệu cho CLR Hosting

Như với các phiên bản trước đó của thời gian chạy , hàm CorBindToRuntimeEx khởi runtime. Bạn có thể chọn phiên bản thời gian chạy để tải, nhưng quy trình có thể chỉ lưu trữ một phiên bản.

+3

Bạn có thể nếu bạn đang sử dụng API lưu trữ .Net 4.0 thay vì API lưu trữ .Net 2.0 ... –

2

Đối với trường hợp # 1, có bất kỳ lý do cụ thể nào (ví dụ: phá vỡ các thay đổi) yêu cầu thư viện được lưu trữ trong thời gian chạy 1.1 không? Có thể để lộ thư viện thông qua một dịch vụ web được biên dịch 1.1 và thay vào đó có điểm thực thi dịch vụ web không? (Hoặc một số kỹ thuật remoting khác, để có được thư viện trong quá trình riêng của mình?)

Đối với trường hợp # 2, có thể biên dịch lại ứng dụng 1.1 dưới 2.0/3.5 sao cho nó có thể cư trú trong cùng một quy trình không?

Trong mọi trường hợp, Rob Walker là đúng (và tôi upvoted) - bạn chỉ đơn giản là không thể lưu trữ 2 phiên bản của thời gian chạy trong cùng một quá trình. Vì vậy, bạn cần phải làm việc xung quanh nó bằng cách nào đó. Tôi muốn tưởng tượng rằng trong cả hai trường hợp, nguồn phải có sẵn, do đó, recompilations và thử nghiệm nên chơi.

+0

John, bạn nói đúng, chúng tôi sẽ phải giải quyết vấn đề khi thay đổi mã không mong muốn. Tôi chỉ muốn chắc chắn rằng chúng tôi đã không nhìn ra giải pháp đơn giản hơn. – CodeForNothing

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