Tôi đang sử dụng CPU Windows 7 và x64. Điều đó có nghĩa là tôi phải luôn biên dịch với tùy chọn "x64" trong Visual Studio? Điều gì về "dll", tôi có thể sử dụng dll x86 từ ứng dụng x64? Có lẽ có những lo ngại khác?làm thế nào để biết cpu để sử dụng trong xây dựng (x86 x64 hoặc AnyCpu)?
Trả lời
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à .
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.
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
Có, một số trình điều khiển 'OleDb' và' ODBC', chẳng hạn, chỉ hoạt động ở chế độ x86. –
@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. –
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).
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.
- 1. Đang tải x86 hoặc x64 assembly
- 2. Làm thế nào tôi có thể biết tôi đang sử dụng x64 hay x86 bằng .NET?
- 3. Gói VC + Redistributable nào để chọn (x86 hoặc x64)?
- 4. Làm thế nào hoặc tại sao MSBuild chọn nền tảng x64 khi tôi không chỉ định nó thay vì AnyCPU?
- 5. Liên kết cấu trúc C++ x86/x64 + Sử dụng thư viện .NET AnyCPU C++ (gọi/gọi lại)
- 6. Tải x64 hoặc x86 DLL tùy thuộc vào nền tảng?
- 7. Sử dụng dll x64 trong ứng dụng x86
- 8. Làm thế nào để kiểm tra theo chương trình cho dù một hội đồng quản lý là x86, x64 hoặc AnyCPU?
- 9. Cách thêm x64 (hoặc CPU bất kỳ) làm tùy chọn xây dựng trong Visual Studio 2010 (từ ứng dụng bảng điều khiển sang thư viện lớp)
- 10. Visual Studio tải đúng (x86 hoặc x64) dll!
- 11. Làm thế nào để biết những dự án nào không thể xây dựng trong Visual Studio
- 12. Làm thế nào để xây dựng bằng cách sử dụng MSBuild và Delphi XE2
- 13. Làm cách nào để đo CPU, bộ nhớ và mức sử dụng đĩa trong khi xây dựng?
- 14. Làm thế nào để tăng tốc android ndk xây dựng
- 15. Windows XP x86 được chọn xây dựng?
- 16. Làm thế nào để xây dựng HttpPostedFileBase?
- 17. Làm thế nào để xây dựng protobuf của Google trong Windows bằng cách sử dụng MinGW?
- 18. làm thế nào để sử dụng được xây dựng trong cedet trong emacs 23,3?
- 19. Microsoft Fakes x64 không x86 và v4.5
- 20. Làm cách nào để sử dụng gcc để biên dịch mã lắp ráp x86 trên máy tính x64
- 21. Làm thế nào để xây dựng một tokenizer trong PHP?
- 22. Làm thế nào để sử dụng Generics trong mô hình xây dựng
- 23. làm thế nào để xây dựng lại rootfs trong buildroot
- 24. Làm thế nào để sử dụng MSBuild để xây dựng một Visual Studio Thiết lập dự án
- 25. Làm thế nào để sử dụng trình biên dịch 'yield return' để xây dựng một lớp
- 26. Làm thế nào để sử dụng Biểu thức để xây dựng một Kiểu ẩn danh?
- 27. Ứng dụng MVC cực kỳ chậm để xây dựng
- 28. Làm thế nào để sử dụng JSON để xây dựng lại đối tượng Javascript?
- 29. Cách xử lý các gói x86 và x64
- 30. Trong clojure, làm thế nào để xây dựng chuỗi lười biếng sử dụng chức năng lặp
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? –
@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. –
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. –