2012-01-23 16 views
13

Mam projekt C#, który zawiera odwołanie do ScintillaNET. Niestety ScintillaNET lubi wykrywać architekturę komputera i ładuje natywną bibliotekę DLL na podstawie działającej architektury. Oznacza to, że mój projekt musi zostać wstępnie skompilowany do wersji x86 i x64 (nie mogę użyć żadnego procesora z powodu powyższego wykrycia).Kompilowanie pliku binarnego C# .NET x64 w systemie x86

Problem polega na tym, że mój serwer kompilacji jest tylko x86. Czy istnieje sposób, w jaki mogę skompilować zespół .NET w trybie x64 na komputerze x86? O ile wiem, przełączenie po prostu zmusza komputer do załadowania zespołu dla wymaganej architektury i nie generuje w rzeczywistości kodu zależnego od architektury podczas kompilacji, jednak podczas kompilowania pod Mono 2.10.6 na serwerze kompilacji I pojawiają się błędy takie jak:

„błąd CS0016: nie można zapisać do pliku` ScintillaNet”, przyczyna: AMD64"

nie mogę korzystać CorFlags.exe zmienić nagłówki PE, jak to jest oparte na systemie Linux

zbuduj serwer. Czy jest jakiś sposób to zrobić?

+5

Nie ma sensu, bitness jest określany przez główny zestaw startowy (EXE), a nie przez bibliotekę taką jak ScintillaNET. Użyj AnyCPU. –

+4

Wygląda na to, że jego projekt jest głównym zbiorem startowym. Jeśli zaczyna się jako x86 na maszynie, która jest x64, Scintilla zrobi własne wykrywanie, znajdzie x64, spróbuje załadować natywne biblioteki dll x64 do aplikacji x86 i zawiedzie. Naprawdę, jest to błąd w Scintilla, że ​​nie wykrywa architektury bieżącego procesu, zamiast maszyny. – antiduh

+0

Zgodnie z dokumentacją mono, opcja '--aot' nie bierze platformy jako parametru. To nie wydaje się możliwe od razu. –

Odpowiedz

2

Rozwiązałem ten problem, przełączając projekt z powrotem na Dowolny procesor. Ponieważ Scintilla będzie działać tylko w architekturze natywnej, niezależnie od ustawień .NET, musiałem uruchomić ją jako 64-bitową na moim komputerze. Pierwotnie zamierzałem wymusić na architekturze wersję 32-bitową, aby uzyskać Edycję i Kontynuację, co doprowadziło do pomyłki w wykryciu architektury Scintilla.

W rzeczywistości Scintilla wymusi na natywnej architekturze, ale jeśli zbudujesz i uruchomisz w dowolnym procesorze, aplikacja .NET będzie działała poprawnie. Ponadto, ponieważ nie mogę uruchomić aplikacji .NET w/Scintilla w trybie 32-bitowym (do edycji i kontynuowania pracy), nie mam żadnej przewagi, aby wymusić tryb 64-bitowy na moim komputerze.

Powiązane problemy