2012-02-27 30 views
11

Tôi có thư viện C# được gọi bởi nhiều máy khách (cả 32 bit và 64 bit). Cho đến nay nó được biên dịch thành AnyCPU, nên không có vấn đề gì cả.Cách phân phối cả phiên bản 32 và 64 bit của thư viện

Gần đây tôi đã thêm một phụ thuộc vào thư viện .NET SQL. Thư viện này có cả hai hương vị 32 và 64 bit (nhưng không phải là AnyCPU). Vì vậy, bây giờ, tôi phải có 2 bản xây dựng - cho cả hai bit.

Trong quá khứ, tôi đã thấy các thư viện khác (MS SQL Compact đi kèm với tâm trí) có một lược đồ .NET đơn lẻ có các thư mục Private\amd64Private\x86 trong các thư mục với các thư viện gốc thích hợp trong đó sẽ gọi cho mỗi người khi cần thiết.

Cách tiếp cận này có khả thi cho tình huống của tôi không? Có tài liệu hướng dẫn về cách triển khai không? Có yêu cầu thay đổi mã hay đây là kỹ thuật phân phối không?

Trả lời

6

Có một số cách bạn có thể xử lý này. Cần thay đổi mã (nhỏ) cho ba phương pháp đầu tiên:

A. Bạn có thể sửa đổi PATH để trỏ đến thư mục nền tảng cụ thể trong khi khởi động ứng dụng. Sau đó, .NET sẽ tự động tải các DLL cục bộ từ thư mục đó.

B. Bạn có thể đăng ký sự kiện AssemblyResolve và sau đó chọn lắp ráp dựa trên nền tảng.

Xem bài đăng trên blog của Scott Bilias về số này http://scottbilas.com/blog/automatically-choose-32-or-64-bit-mixed-mode-dlls/. Lưu ý rằng anh ta kết thúc cách tiếp cận ưa thích A.

"Tóm lại, giải pháp là để lừa bộ nạp! Tham khảo p4dn.dll không tồn tại và sử dụng sự kiện AssemblyResolve để chặn tải và định tuyến lại nó đến lắp ráp kích thước bit chính xác. "

C. Sử dụng tập hợp exe.configs cụ thể cho nền tảng và phần tử codebase để xác định vị trí lắp ráp. Thiết lập của bạn sẽ cài đặt đúng dựa trên nền tảng.

http://msdn.microsoft.com/en-us/library/4191fzwb.aspx

D. Viết hai thiết lập một cho 32-bit và một cho 64-bit, sau đó chỉ cài đặt các tập tin thích hợp cho nền tảng này.

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