2012-01-23 35 views
13

Tôi có dự án C# chứa tham chiếu đến ScintillaNET. Thật không may ScintillaNET thích phát hiện kiến ​​trúc của máy và tải DLL gốc dựa trên kiến ​​trúc đang chạy. Điều đó có nghĩa rằng dự án của tôi phải được biên dịch trước thành các phiên bản x86 và x64 (tôi không thể sử dụng bất kỳ CPU nào do phát hiện ở trên).Biên dịch nhị phân C# .NET x64 trên hệ thống x86

Vấn đề là máy chủ xây dựng của tôi chỉ có x86. Có cách nào tôi có thể biên dịch một hội đồng. NET ở chế độ x64 trên một máy x86? Theo như tôi biết, việc chuyển đổi đơn giản buộc máy tính phải tải assembly cho kiến ​​trúc yêu cầu và không thực sự xuất ra bất kỳ mã phụ thuộc vào kiến ​​trúc nào tại thời gian biên dịch, tuy nhiên, khi biên dịch theo Mono 2.10.6 trên máy chủ build I nhận được lỗi như:

"lỗi CS0016: không thể ghi vào tập tin 'ScintillaNet', nguyên nhân: AMD64"

tôi không thể sử dụng CorFlags.exe để thay đổi tiêu đề PE vì đây là một dựa trên Linux xây dựng máy chủ. Có cách nào để làm điều này không?

+5

Làm cho không có ý nghĩa, bitness được xác định bởi hội đồng khởi động chính (EXE), không phải bởi một thư viện như ScintillaNET. Sử dụng AnyCPU. –

+4

Có vẻ như dự án của anh là hội đồng khởi động chính. Nếu nó bắt đầu bằng x86 trên máy tính là x64, Scintilla sẽ tự phát hiện, tìm x64, thử tải các tệp x64 gốc vào ứng dụng x86 và không thành công. Thực sự, đó là một lỗi trong Scintilla mà nó không phát hiện ra kiến ​​trúc của quá trình hiện tại, thay vì máy. – antiduh

+0

Theo tài liệu đơn âm, tùy chọn '--aot' không lấy nền tảng làm tham số. Nó dường như không thể như thời điểm này. –

Trả lời

2

Tôi đã giải quyết được vấn đề này bằng cách chuyển dự án trở lại CPU bất kỳ. Kể từ khi Scintilla sẽ chỉ làm việc trong kiến ​​trúc bản địa bất kể cài đặt .NET, tôi đã phải chạy nó như là 64-bit trên máy tính của tôi. Ban đầu tôi đã có ý định buộc kiến ​​trúc đến 32-bit để có được Chỉnh sửa và Tiếp tục và điều này dẫn đến sự nhầm lẫn về cách Scintilla phát hiện kiến ​​trúc.

Trong thực tế, Scintilla sẽ tự ép buộc nó vào kiến ​​trúc gốc, nhưng nếu bạn xây dựng và chạy dưới bất kỳ CPU, ứng dụng .NET sẽ hoạt động tốt. Ngoài ra, vì tôi không thể chạy ứng dụng .NET w/Scintilla ở chế độ 32 bit (để chỉnh sửa và tiếp tục hoạt động), tôi không có lợi thế nào để buộc chế độ 64 bit trên máy của mình.

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