2012-02-09 42 views

Trả lời

7

This article chứa tổng quan ngắn gọn về từng tùy chọn.

Dưới đây là một trích dẫn nhỏ:

Cài đặt mặc định, Bất kỳ CPU, có nghĩa là việc lắp ráp sẽ chạy natively trên CPU là nó hiện đang chạy trên. Có nghĩa là, nó sẽ chạy dưới dạng 64 bit trên máy 64 bit và 32 bit trên máy 32 bit. Nếu lắp ráp được gọi từ một ứng dụng 64 bit, nó sẽ hoạt động như một cụm lắp ráp 64 bit và cứ như vậy.

Nếu dự án được đặt thành x86, điều này có nghĩa là dự án được dự định là chỉ chạy dưới dạng quy trình 32 bit. Quy trình 64 bit sẽ không thể gọi thành một bộ hội đồng như X86. Lý do để thiết lập dự án của bạn là x86 bao gồm các phụ thuộc khi các DLL gốc chỉ có sẵn trong 32 bit hoặc thực hiện các cuộc gọi tự nhiên giả định 32 bit. Ứng dụng và các hội đồng được đánh dấu cho x86 vẫn có thể chạy trên Windows 64 bit. Tuy nhiên chúng chạy dưới WOW64. Visual Studio chính nó chạy theo chế độ mô phỏng này vì nó là một ứng dụng 32-bit.

Đặt dự án thành x64 sẽ chỉ định rằng assembly phải chạy trong Windows 64 bit. Cố gắng chạy assembly trên 32-bit Windows hoặc gọi hội đồng từ một quá trình 32-bit sẽ dẫn đến lỗi thời gian chạy là .

+0

Làm cách nào để xác định xem các tệp DLL chỉ khả dụng trong 32 bit? Ngoài ra, làm thế nào người ta có thể biết nếu chương trình đang thực hiện cuộc gọi bản địa giả sử 32-bit? –

+0

@DanW, tôi khuyên bạn nên đăng câu hỏi. Hỏi một câu hỏi như thế trong các bình luận sẽ không giúp bạn đi xa lắm. –

+0

Chỉ thuận tiện hơn nếu có ở đây nếu những người khác cũng gặp phải vấn đề này. Dù sao, tôi nghĩ rằng [this] (http://stackoverflow.com/a/2418287/848344) sẽ làm các trick. –

4

Nói chung, bạn nên sử dụng AnyCpu mọi lúc.

Nếu bạn có lý do cụ thể để mong đợi sự cố tương thích với điều đó, thì bạn sẽ cần chọn x86 hoặc x64 nếu thích hợp.

Như đã lưu ý trong các nhận xét, dll được xây dựng dựa trên các kiến ​​trúc cụ thể có thể yêu cầu bạn xây dựng lắp ráp của bạn theo một cách nhất định. Đây sẽ là điều bạn sẽ muốn thực hiện khi bạn cần, nếu không thì không.

+0

khi tôi đang sử dụng sự cố ứng dụng AnyCpu do một số lý do. tùy chọn x86 hoạt động ... có lẽ điều này là do dll đã sử dụng .. – javapowered

+1

Có, một số trình điều khiển 'OleDb' và' ODBC', chẳng hạn, chỉ hoạt động ở chế độ x86. –

+0

@javapowered Có nếu DLL của bạn đặc biệt x86 hoặc x64 sử dụng tương ứng. Ví dụ tôi đã sử dụng một Oracle DB Access DLL đó là x86 và tôi được yêu cầu để sau đó biên dịch trong x86. –

2

Không ... máy bạn viết mã trên/biên dịch/xây dựng phần mềm (EXE, DLL ...) không có liên quan gì đến câu hỏi nhắm mục tiêu (x86/x64/Any).

NẾU bạn muốn kết quả của bản dựng chạy bất cứ nơi nào bạn sử dụng x86 hoặc AnyCPU. Nếu bạn muốn kết quả chỉ chạy trên x64 thì bạn sử dụng x64.

Có một số trường hợp bạn phải sử dụng x86 hoặc x64 - đó là khi bạn sử dụng một số thành phần/thư viện/DLL/ActiveX, v.v. trong dự án của bạn, chỉ 32 bit (sau đó x86) hoặc chỉ 64 bit (sau đó x64).

1

AnyCPU là những gì tôi thường đề xuất. Bạn có thể thấy vấn đề này được thảo luận sâu tại this SO post.

Mối quan tâm duy nhất là bạn không thể quay ngược lại - bạn không thể sử dụng hội đồng x64 từ ứng dụng x86. AnyCPU làm giảm bớt nguy cơ tiềm ẩn này.

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