2012-01-23 19 views
13

Tengo un proyecto C# que contiene una referencia a ScintillaNET. Desafortunadamente, a ScintillaNET le gusta detectar la arquitectura de la máquina y carga la DLL nativa en función de la arquitectura en ejecución. Eso significa que mi proyecto debe estar precompilado en las versiones x86 y x64 (no puedo usar ninguna CPU debido a la detección anterior).Compilación de un binario C# .NET x64 en un sistema x86

El problema es que mi servidor de compilación es solo x86. ¿Hay alguna forma de que pueda compilar un ensamblado .NET en modo x64 en una máquina x86? Por lo que yo sé, el alternar simplemente obliga a la computadora a cargar el ensamblaje para la arquitectura requerida y en realidad no genera ningún código dependiente de la arquitectura en tiempo de compilación, sin embargo, al compilar bajo Mono 2.10.6 en el servidor de compilación I obtener errores tales como:

"CS0016 de error: no se pudo escribir en el archivo` ScintillaNet', causa: AMD64"

no puedo utilizar CorFlags.exe para cambiar los encabezados PE, ya que es un Linux basada servidor de compilación ¿Hay alguna manera de hacer esto?

+5

No tiene sentido, la bitness está determinada por el ensamblaje de inicio principal (EXE), no por una biblioteca como ScintillaNET. Use AnyCPU. –

+4

Parece que su proyecto es el ensamblaje principal de inicio. Si comienza como x86 en una máquina que es x64, Scintilla hará su propia detección, encontrará x64, intentará cargar x64 dlls nativos en la aplicación x86 y fallará. Realmente, es un error en Scintilla que no detecta la arquitectura del proceso actual, en lugar de la máquina. – antiduh

+0

De acuerdo con la documentación mono, la opción '--aot' no toma la plataforma como parámetro. No parece posible a partir del momento. –

Respuesta

2

Terminé resolviendo este problema cambiando el proyecto a Any CPU. Como Scintilla solo funcionará en la arquitectura nativa independientemente de la configuración de .NET, tuve que ejecutarla como 64 bits en mi máquina. Originalmente tenía la intención de forzar la arquitectura a 32 bits para obtener Editar y Continuar y esto lleva a la confusión de cómo Scintilla detectó las arquitecturas.

En realidad, Scintilla se forzará a sí mismo a la arquitectura nativa, pero si compila y ejecuta bajo Cualquier CPU, la aplicación .NET funcionará bien. Además, dado que no puedo ejecutar una aplicación .NET w/Scintilla en el modo de 32 bits (para editar y continuar trabajando) tampoco me da ninguna ventaja el forzar el modo de 64 bits en mi máquina.

Cuestiones relacionadas