c# - Configuración orientada a ambos x86 y x64?
installation cpu-architecture (4)
- Abra un proyecto de implementación.
- En el Explorador de soluciones, seleccione el proyecto de implementación.
- En la ventana Propiedades, seleccione la propiedad TargetPlatform.
- 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).
- En el momento de la instalación, se generará un error y la instalación se detendrá si el equipo de destino no es compatible con la plataforma especificada.
Tengo un programa que requiere dlls x64 y x86 (se da cuenta de cuáles necesita en tiempo de ejecución), pero cuando intenta crear una configuración, se queja:
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 ''
La dirección de archivo AlphaVSS.Win2008.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?
.Net tiene una 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 vez que no debe usarlo es si sabe que tiene dependencias o requisitos que no son buenos para una arquitectura u otra. Por ejemplo: sabes que necesitas una gran cantidad de ram, tienes una dependencia en un dll nativo de 32 bits o quieres precompilar la aplicación.
Aquí hay un peligro porque tienes 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?
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.
Me encontré con esto también y escribí una publicación en el blog sobre mi solución:
- desinflar el archivo usando deflate.exe, nombrarlo con una extensión diferente (por ejemplo, .x64)
- agrégalo a tu proyecto principal como un archivo de contenido
- agregue un proyecto de acción personalizado a su solución
- agregue la acción personalizada a los proyectos de instalación "Instalar" acciones personalizadas
- inflar el archivo dentro de las acciones personalizadas Instalar método usando
- System.IO.Compression.DeflateStream (ver el código anterior)
- da un pequeño baile alrededor de tu escritorio, baja por el pasillo, y pasa a tantos compañeros de trabajo como te moleste :)
El archivo deflate.exe
se puede descargar desde su repositorio en el código de google.