2015-01-11 16 views
7

Lý do mà không phải tất cả các hội đồng trong Bộ đệm ẩn toàn cầu (GAC) được xây dựng là MSIL? Tôi thấy x86AMD64 kiến ​​trúc các loại sử dụng cho một số hội đồng, như trong ví dụ dưới đây, nhưng không phải cho người khác:Tại sao không phải tất cả các hội đồng trong GAC được xây dựng dưới dạng MSIL?

C:\Windows\assembly\

enter image description here

Tại sao System.Data xây dựng cho hai kiến ​​trúc vi xử lý khác nhau, trong khi System.CoreMSIL?

C:\Windows\Microsoft.NET\assembly

enter image description here

Một mô hình tương tự có thể được nhìn thấy dưới phiên bản thứ hai của GAC, trình bày ở trên. Các hội đồng được chia thành các kiến ​​trúc khác nhau, nhưng không phải tất cả chúng đều được tích hợp vào các phiên bản 32/64 - một số chỉ là MSIL.

+1

Chúng có tối ưu hóa trình biên dịch và mục tiêu cho kiến ​​trúc. Đối với phiên bản cao hơn của .NET, các tối ưu hóa này được trộn lẫn trong trình biên dịch C#. – VMAtm

Trả lời

7

Khi biên dịch thư viện, bạn có thể chọn nhắm mục tiêu "CPU bất kỳ" hoặc kiến ​​trúc bộ xử lý cụ thể.

Thư viện "Mọi CPU" chỉ cần một mục nhập duy nhất trong GAC và toàn bộ assembly được biên dịch thành MSIL.

Các hội đồng khác cần thư viện khác nhau cho mỗi kiến ​​trúc. Các thư viện này được xây dựng cho từng loại CPU và có nhiều bản sao trong GAC. Lý do phổ biến nhất là bao gồm mã không được quản lý hoặc tải một tệp dll gốc là kiến ​​trúc cụ thể.

Trong ví dụ của bạn System.Core có lẽ là mã được quản lý hoàn toàn trong khi System.Data có thể được xây dựng trên đầu trang của một loạt các thư viện cửa sổ gốc.

Các ứng dụng chạy ở chế độ 32 bit sẽ tải phiên bản 32 bit của thư viện trong khi các ứng dụng chạy ở chế độ 64 bit sẽ tải phiên bản 64 bit.

+0

Cảm ơn, điều đó có ý nghĩa. –

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