2013-06-11 58 views
7

Khi tài liệu Microsoft khai báo Runtime Hosts .NET có nhiều hơn một máy chủ lưu trữ thời gian chạy để hỗ trợ và thực thi mã của ứng dụng của chúng tôi, thì làm cách nào để biết máy chủ lưu trữ thời gian chạy nào của máy chủ Microsoft Runtime đang lưu trữ mã của tôi.Làm cách nào để biết Máy chủ thời gian chạy nào hiện đang chạy mã của tôi?

Tôi đang sử dụng ngôn ngữ C# để phát triển thư viện lớp dll có thể được sử dụng và/hoặc lưu trữ bởi nhiều máy chủ Thời gian chạy, vì vậy tôi cần biết máy chủ lưu trữ thời gian nào đang lưu trữ mã của tôi để đáp ứng các điều kiện cụ thể.

+0

Bạn ngụ ý rằng đoạn mã DLL Runtime "shared" có thể đang sử dụng phiên bản .net mới hơn so với mã đang gọi nó? Việc đọc/ghi vào tập tin * .config có phải là mối quan tâm duy nhất của bạn không? –

Trả lời

0

API lưu trữ .NET Framework 4 cung cấp chức năng CLRCreateInstance, có thể trả về giao diện ICLRMetaHost. Sau đó bạn có thể gọi phương thức GetRuntime trên giao diện này để có một giao diện ICLRRuntimeInfo cụ thể, được đưa ra một phiên bản CLR cụ thể. Thủ tục này thay thế phương thức CorBindToRuntimeEx được sử dụng bởi API lưu trữ .NET Framework 2.0.

API lưu trữ .NET Framework 2.0 cung cấp hàm CorBindToRuntimeEx để khởi tạo thời gian chạy. Bạn có thể chọn phiên bản của thời gian chạy để tải, nhưng một quá trình có thể chỉ lưu trữ một phiên bản. Nếu phiên bản 2.0, 3.0 hoặc 3.5 được tải, hàm trả về giao diện ICLRRuntimeHost, được sử dụng để bắt đầu thời gian chạy và thực thi mã được quản lý.

Nguồn: http://msdn.microsoft.com/en-us/library/dd380850.aspx

+0

Tôi có thể gọi các chức năng này như thế nào và có cách tiếp cận đơn giản nào khác không? –

+0

Sau khi đào sâu trong MSDN và google tôi đến thực tế rằng các giao diện được cung cấp bởi MSCorEE.dll không bao gồm một phương pháp để xác định tên máy chủ hoặc phiên bản cho CLR, giao diện cung cấp chức năng lưu trữ và quản lý của CLR chỉ, thông tin bạn có thể biết bằng cách sử dụng các giao diện này là phiên bản của CLR đang chạy mã của bạn KHÔNG phải máy chủ chạy CLR chính nó –

+0

Vui lòng tham khảo http://msdn.microsoft.com/en-us/library/a51xd4ze.aspx để kiểm tra lại –

1

Có thực sự khá một cách dễ dàng để xác định phiên bản runtime hiện tại của CLR. Khi điều đó xảy ra, Environment.Version sẽ trả về một phiên bản khác nếu mã của bạn hiện đang chạy trong một CLR khác do thực thi SxS (Side-by-Side).

Để xem cách hoạt động trong thực tế trong một ứng dụng có thể có hai thời gian chạy cùng một lúc, hãy xem this article on Demonstrating Side by Side execution.

if(Environment.Version.StartsWith("2.0")) 
    System.Console.WriteLine("Inside .NET CLR 2.0"); 
else if(Environment.Version.StartsWith("4.0")) 
    System.Console.WriteLine("Inside .NET CLR 4.0"); 
else 
    System.Console.WriteLine("Unknown .NET version"); 

Lưu ý rằng trình tải .NET 2.0 sẽ tải CLR gần đây nhất của .NET 2.0, sẽ là .NET 3.5 trong hầu hết các trường hợp. Không thể chạy các phiên bản .NET 2.0 khác nhau trong một quy trình. Không phải là nó có thể to run .NET 1.0 or .NET 1.1 side by side with .NET 2.0 in .NET 4.0 (có thể mặc dù để chạy chỉ 1.0 hoặc 1.1 cạnh nhau trong .NET 4.0).

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