2012-01-23 2 views
13

ScintillaNET에 대한 참조가 포함 된 C# 프로젝트가 있습니다. 불행히도 ScintillaNET은 컴퓨터의 아키텍처를 감지하고 실행중인 아키텍처를 기반으로 기본 DLL을로드합니다. 즉, 내 프로젝트를 x86 및 x64 버전으로 미리 컴파일해야합니다 (위의 감지로 인해 CPU를 사용할 수 없음).x86 시스템에서 C# .NET x64 바이너리 컴파일

문제는 내 빌드 서버가 x86 전용이라는 것입니다. x86 컴퓨터에서 x64 모드로 .NET 어셈블리를 컴파일 할 수있는 방법이 있습니까? 내가 아는 한 토글은 단순히 컴퓨터로 하여금 필요한 아키텍처를 위해 어셈블리를로드하도록 강제하고 컴파일 시간에 아키텍처 의존적 인 코드를 출력하지는 않지만 서버를 빌드 할 때 Mono 2.10.6 아래에서 컴파일 할 때

: 같은 오류를 얻을 "오류 CS0016을 'ScintillaNet`, 원인 파일에 쓸 수 없습니다 : AMD64를"

는 이이 같이 나는 PE 헤더를 변경 CorFlags.exe을 사용할 수 없습니다

리눅스 기반 빌드 서버. 이 일을 할 수있는 방법이 있습니까?

+5

의미가 없습니다. Bitint는 ScintillaNET과 같은 라이브러리가 아니라 주 시작 어셈블리 (EXE)에서 결정됩니다. AnyCPU를 사용하십시오. –

+4

그의 프로젝트와 같은 사운드는 주요 시동 어셈블리입니다. x64 인 시스템에서 x86으로 시작하면 Scintilla는 자체 탐지를 수행하고 x64를 찾고 x86 응용 프로그램에 원시 x64 dll을로드하려고 시도합니다. Scintilla의 버그는 컴퓨터 대신 현재 프로세스의 아키텍처를 감지하지 못합니다. – antiduh

+0

모노 문서에 따르면'--aot' 옵션은 플랫폼을 매개 변수로 사용하지 않습니다. 지금은 불가능할 것 같습니다. –

답변

2

프로젝트를 모든 CPU로 다시 전환하여이 문제를 해결했습니다. Scintilla는. NET 설정에 관계없이 기본 아키텍처에서만 작동하므로 내 컴퓨터에서 64 비트로 실행해야했습니다. 원래 필자는 32 비트 아키텍처를 편집 및 계속 진행하도록 만들려고했는데, 이로 인해 Scintilla가 아키텍처를 어떻게 감지했는지 혼동하게되었습니다.

사실 Scintilla는 자체 아키텍처로 강제 전환되지만 모든 CPU에서 빌드하고 실행하면 .NET 응용 프로그램이 정상적으로 작동합니다. 또한, 32 비트 모드에서 Scintilla를 사용하는 .NET 응용 프로그램을 실행할 수 없기 때문에 (편집 및 계속 작업을 위해) 내 컴퓨터에서 64 비트 모드를 강제 실행하지 않아도됩니다.