2009-07-27 30 views
5

Tôi cần xây dựng một ứng dụng cho nền tảng 64 bit để sử dụng một số DLL được xây dựng cho các máy 64 bit. Tôi biết làm thế nào để bạn có thể xây dựng từng dự án riêng biệt để nhắm mục tiêu cho nền tảng 64-bit. Nhưng khi bạn có nhiều dự án trong một giải pháp Visual Studio, và một số DLL phụ thuộc vào các dự án khác. Bạn quyết định những dự án nào sẽ xây dựng như x64, x86 hoặc Bất kỳ CPU nào.Trong Visual Studio, cách tạo đúng ứng dụng cho máy 64 bit?

Xin cảm ơn trước.

Trả lời

6

Khi một chương trình được biên dịch trong "BẤT CỨ CPU" nghĩa là nó là kiến ​​trúc trung lập - Nó có thể chạy trong cả quá trình 64 bit hoặc quá trình 32 bit. Nó được xác định bởi nền tảng mà chương trình đang được thực thi. Nếu nó là một nền tảng 64bit, một chương trình được xây dựng trong BẤT CỨ CPU sẽ tải như là một quá trình 64 bit. Mặt khác, nếu nó là một nền tảng 32 bit, một chương trình được xây dựng trong BẤT CỨ CPU sẽ tải trong một quá trình 32 bit.

Tuy nhiên, bạn không thể xây dựng tất cả mọi thứ là "BẤT CỨ CPU" bởi vì bạn có thể phải phụ thuộc mà đòi hỏi phải có một nền tảng này hay cách khác

Một chương trình phải được xây dựng với chế độ x64 nếu nó có x64 phụ thuộc (dựa trên các thư viện khác được xây dựng trong x64). Điều này cũng yêu cầu chương trình được thực hiện trên nền tảng 64 bit

Chương trình phải được xây dựng với chế độ x86 nếu nó không phụ thuộc 32 bit hoặc nếu thư viện được quản lý trong x86.

Chương trình chương trình không phụ thuộc vào bit x64 hoặc phụ thuộc 32 bit không được quản lý có thể được tạo trong "bất kỳ CPU nào".

Tuy nhiên, bất kể các quy tắc này, nếu bạn xây dựng trong BẤT CỨ CPU, bạn nên kiểm tra kỹ lưỡng trên nền tảng 64 bit và nền tảng 32 bit. Bài đăng này thảo luận các vấn đề khác có thể chi tiết hơn.

More on ANY CPU

0

Nếu có một phụ thuộc chỉ 64 bit thì bạn cần phải xây dựng mọi thành phần là 64 bit.

3

Độ bit ứng dụng được xác định bởi tệp thực thi tải tệp DLL. Miễn là quá trình khởi chạy được cấu hình để nhắm mục tiêu x64, thì tệp DLL sẽ được tải dưới dạng x64 miễn là chúng được định cấu hình là x64 hoặc CPU bất kỳ. Vì vậy, bạn không cần cấu hình tất cả các tệp DLL dưới dạng x64, chỉ là ứng dụng khởi chạy. Phần còn lại có thể được để lại dưới dạng CPU bất kỳ trừ khi chúng có các phụ thuộc 64 bit cụ thể.

2

Đối với tôi, nó thực sự đi theo những gì tôi phụ thuộc. Hoặc chính xác hơn những gì mà sự phụ thuộc vào DLL phụ thuộc vào ứng dụng của tôi phụ thuộc vào. Nếu bất kỳ người trong số họ có một phụ thuộc kiến ​​trúc cụ thể (x86 hoặc amd64), tôi đặt dự án của tôi để có cùng một sự phụ thuộc. Bằng cách này, tôi giúp đảm bảo hơn bất kỳ vấn đề nào với tải trong nền tảng sai sẽ hiển thị càng sớm càng tốt.

Nếu không có sự phụ thuộc nền tảng và mã của tôi không có, tôi đặt nó thành AnyCPU cho đến khi tôi tìm thấy lý do nào đó để làm khác.

2

Để thêm vào hàng đầu các câu trả lời tuyệt vời khác.Tôi tìm thấy một số thông tin hữu ích về MSDN

Trên 64-bit hệ điều hành Windows:

  • Assemblies biên soạn với/nền tảng: x86 sẽ thực hiện trên CLR 32 bit chạy dưới WOW64.
  • Thực thi được biên dịch với/nền tảng: anycpu sẽ thực thi trên CLR 64 bit.
  • Các tệp DLL được biên dịch với/nền tảng: anycpu sẽ thực thi trên cùng một CLR như quá trình mà tệp đang được tải.

Cũng lưu ý rằng không thể tải các tệp DLL x86 trên quy trình 64 bit. Nếu không thể nhận được phiên bản x64 của các tệp DLL, phương án thay thế là chạy x86 DLL trên quy trình 32 bit (WOW64) và thực hiện truyền thông liên tiếp (IPC) với quy trình 64 bit. More detail.

1

Đã có một cuộc thảo luận tuyệt vời từ năm ngoái về điều này trên .NET Rocks, here, nó thực sự đã giúp tôi hiểu tất cả các sắc thái

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