2009-04-15 16 views
17

Tengo un programa que requiere tanto x64 y x86 (DLL que se da cuenta de cuáles se necesita en tiempo de ejecución), pero cuando se trata de crear una configuración, se queja:Configuración orientada tanto a x86 como a x64?

Archivo AlphaVSS.WinXP.x64. dll 'targeting' AMD64 'no es compatible con la plataforma de destino del proyecto' x86 '
Archivo AlphaVSS.Win2003.x64.dll' targeting 'AMD64' no es compatible con la plataforma de destino del proyecto 'x86'
File AlphaVSS.Win2008. La segmentación de x64.dll 'AMD64' no es compatible con la plataforma de destino del proyecto 'x86'

¿Cómo puedo hacer que mi configuración se oriente a ambas plataformas como lo hace mi programa?

Respuesta

11

El MSI creado por el proyecto de instalación (en Visual Studio) solo puede apuntar a una plataforma a la vez. Su opción es hacer 2 MSI, fusionarlos y crear una correa de arranque de configuración personalizada que elija entre los dos. Hay algunos productos de terceros, como Advanced Installer por ejemplo, que pueden hacer esto por usted.

+9

I No quería tener que hacer esto ... – Malfist

2

.Net tiene la opción "Cualquier CPU". Es tentador pensar que se trata más de una opción "genérica" ​​que solo usará las características x86 menores, pero realmente permite que el compilador JIT de cada máquina elija el tipo de CPU apropiado para esa máquina.

La única ocasión en que no debe usarlo es si sabe que tiene dependencias o requisitos que no son buenos para una arquitectura u otra. Por ejemplo: usted sabe que necesita un lote de ram, tiene una dependencia en un dll nativo de 32 bits, o si desea precompilar la aplicación.

Aquí hay un peligro porque tiene una dependencia dll específica de la plataforma. Pero tienes dlls para ambos tipos y parece que sabes cómo elegir el correcto en tiempo de ejecución. ¿La opción 'Cualquier CPU' funcionará para usted?

+0

Mi proyecto está configurado en cualquiera, sin embargo, la configuración no permite esa opción. Un Setup Project la propiedad TargetPlatform y tengo la opción de x86, x64 e Itanium. No hay ninguno. – Malfist

+0

Hmm .... los proyectos de instalación incluyen un archivo .exe nativo para iniciar la instalación en caso de que .Net aún no esté presente. Ese puede ser el factor limitante. –

+0

En ese caso, ¿podría probar con un proyecto de instalación de 32 bits (x86) que incluya ambos conjuntos de dlls? El proyecto de instalación aún debería ejecutarse en los sistemas x64 y x86, y si las cosas funcionan bien, igual puede obtener el código x64 cuando corresponda. –

5

me encontré con esto también y sobre wrote a blog post mi solución:

  • desinflar el archivo usando deflate.exe, dándole el nombre con una extensión diferente (por ejemplo .X64)
  • añadirlo a su proyecto principal, un archivo de contenido
  • añadir un proyecto de acción personalizado para su solución
  • añadir la acción personalizada a los proyectos de instalación "Instalar" acciones personalizadas
  • inflar el archivo dentro de las acciones personalizadas mí Instalar DTO usando
  • System.IO.Compression.DeflateStream (ver el código de seguridad)
  • hacer un poco de baile alrededor de su escritorio, al final del pasillo, y más allá de la mayor cantidad de compañeros de trabajo que le interesan para molestar :)

El archivo deflate.exe se puede descargar desde su repository en el código de google.

+1

Esta es una excelente idea, y recientemente la utilicé en un proyecto. Una complicación: si su acción personalizada borra el archivo comprimido después de expandirlo (o extrae el contenido de un archivo zip y luego elimina el archivo zip), y su instalador instala accesos directos. De forma predeterminada, los accesos directos se anuncian, lo que significa que cuando los lance el sistema comprobará que la instalación está intacta y volverá a ejecutar el instalador cuando encuentre que falta el archivo comprimido. Tendrá que cambiar el archivo msi para que los accesos directos no se anuncien. –

-2
  1. Abra un proyecto de implementación.
  2. En el Explorador de soluciones, seleccione el proyecto de implementación.
  3. En la ventana Propiedades, seleccione la propiedad TargetPlatform.
  4. Elija Itanium para una plataforma Intel Itanium de 64 bits o x64 para cualquier otra plataforma de 64 bits (como los conjuntos de instrucciones AMD64 y EM64T).
  5. En el momento de la instalación, se producirá un error y la instalación se detendrá si el equipo de destino no es compatible con la plataforma especificada.
+1

¿Cómo responde esto la pregunta? – etaiso

Cuestiones relacionadas