2009-01-17 36 views
6

Evey bây giờ và sau đó tôi thấy cả hai phiên bản x86 và x64 của một hội đồng .NET. Hãy xem xét web part for SharePoint sau đây. Tại sao nhà phát triển không cung cấp một phiên bản duy nhất và để cho trình biên dịch JIT phân loại phần còn lại? Khi tôi thấy các loại chào hàng này chỉ là nhà phát triển đã quyết định tạo hình ảnh gốc bằng công cụ như ngen để tránh bị JIT?Tại sao các nhà phát triển .NET cung cấp phiên bản 32-bit/64-bit của các hội đồng .NET?

Ai đó hãy giúp tôi ở đây, tôi cảm thấy như tôi đang thiếu một số lưu ý.

Cập nhật

Từ những gì tôi nhận được dưới đây, cả x86 và x64 xây dựng được cung cấp bởi một hoặc nhiều trong những lý do sau đây:

  1. Các nhà phát triển muốn tránh JITing và tạo ra một nguồn gốc hình ảnh mã của mình, nhắm mục tiêu một kiến ​​trúc cụ thể bằng cách sử dụng công cụ như ngen.exe.

  2. Hội đồng có chứa các cuộc gọi COM cụ thể trên nền tảng và do đó, không có vấn đề gì để xây dựng nó dưới dạng AnyCPU. Trong những trường hợp này, các nền tảng khác nhau có thể chứa mã khác nhau.

  3. Việc lắp ráp có thể chứa các cuộc gọi Win32 sử dụng pinvoke mà sẽ không nhận được ánh xạ lại bởi JIT và do đó, bản dựng nên nhắm mục tiêu nền tảng mà nó được ràng buộc.

+0

Tôi nghĩ ngen chỉ có thể chạy trên máy đích. Đó không phải là trường hợp nữa? – erikkallen

Trả lời

6

Nếu họ đang sử dụng API không phải.Net cụ thể, thì có thể có hai cơ sở mã cho điều này, ví dụ hoàn hảo là điều khiển COM.

ngen cũng là một lý do rất tốt cho điều này như bạn đã đề cập.

+0

... và có thể P/Gọi công cụ quá. –

6

Khi bạn biên dịch ứng dụng .net, bạn phải chọn Mục tiêu nền tảng trong Cài đặt bản dựng. Các lựa chọn là AnyCPU, x86 và x64.

Lỗi phổ biến là chỉ định AnyCPU trong dự án bao gồm các DLL gốc được biên dịch cho x86. Điều này sẽ dẫn đến lỗi khi chạy trên các máy 64 bit, một lý do chính đáng để thử nghiệm trên một máy tính 64 bit.

Do đó, để hỗ trợ những người bị ép buộc bởi các phụ thuộc khác của họ xây dựng cho x86 hoặc x64 trực tiếp, hội đồng cung cấp cả hai.

0

COM xử lý marshaling và unmarshaling qua ranh giới 32/64 bit. Tuy nhiên, nó không cung cấp bất kỳ sự hỗ trợ nào để tải loại nhị phân thay thế vào sai số của căn hộ.

Nhiều hội đồng dựa vào mã nguồn gốc (hầu hết các trình điều khiển SQL được viết bằng C hoặc C++ chẳng hạn). Điều này là cực kỳ rõ ràng cho bất cứ điều gì bằng cách sử dụng p/gọi; do đó, có các biên độ con trỏ khác nhau được biên dịch và phân phối có nghĩa là gói cho phiên bản 64 bit có nhiều khả năng chứa các tệp DLL gốc 64 bit và phiên bản 32 bit có thể chứa các tệp DLL gốc 32 bit. Đây là trường hợp ngay cả khi phiên bản 32 và 64 bit của assembly được biên dịch từ cùng một mã.

csc sẽ tạo ra hình ảnh gốc (được đặt trước) nếu bạn yêu cầu.

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