Компиляция двоичного файла C # .NET x64 в системе x86 - PullRequest
13 голосов
/ 23 января 2012

У меня есть проект C #, который содержит ссылку на ScintillaNET. К сожалению, ScintillaNET любит определять архитектуру машины и загружает собственную DLL на основе работающей архитектуры. Это означает, что мой проект должен быть предварительно скомпилирован в версии x86 и x64 (я не могу использовать любой процессор из-за вышеуказанного обнаружения).

Проблема в том, что мой сервер сборки работает только на x86. Можно ли скомпилировать сборку .NET в режиме x64 на компьютере с архитектурой x86? Насколько мне известно, переключение просто заставляет компьютер загружать сборку для требуемой архитектуры и, тем не менее, фактически не выводит никакого архитектурно-зависимого кода во время компиляции при компиляции в Mono 2.10.6 на сервере сборки I получить ошибки, такие как:

"ошибка CS0016: не удалось записать в файл` ScintillaNet ', причина: AMD64 "

Я не могу использовать CorFlags.exe для изменения заголовков PE, так как это сервер сборки на базе Linux. Есть ли способ сделать это?

1 Ответ

2 голосов
/ 06 апреля 2012

Я решил эту проблему, переключив проект на Any CPU. Поскольку Scintilla будет работать только в собственной архитектуре независимо от настроек .NET, мне пришлось запускать его как 64-разрядный на моей машине. Первоначально я намеревался заставить 32-битную архитектуру получить Edit и Continue, и это привело к путанице в том, как Scintilla обнаружил архитектуры.

В действительности, Scintilla принудительно использует собственную архитектуру, но если вы создадите и запустите на любом процессоре, приложение .NET будет работать нормально. Кроме того, поскольку я не могу запустить приложение .NET с Scintilla в 32-битном режиме (для редактирования и продолжения работы), я также не получаю преимущества принудительного запуска 64-битного режима на моей машине.

...