Estoy tratando de usar MSBuild para construir una solución con una plataforma de destino específica (necesito ambos binarios, x86 y x64). Así es como lo probé:
C:\WINDOWS\Microsoft.NET\Framework\v3.5>MsBuild SolutionPath\Solution.sln /t:Rebuild /p:Configuration=Release /p:Platform="x86"
Sin embargo, la compilación siempre falla si la plataforma es diferente de "Cualquier CPU". ¿Qué estoy haciendo mal?
Esta es la salida impresa de MSBuild:
C: \ WINDOWS \ Microsoft.NET \ Framework \ v3.5> MsBuild SolutionPath \ Solution.sln / t: Rebuild / p: Configuration = Release / p: Platform = "x86" Microsoft (R) Build Engine Versión 3.5.30729.1 [ Microsoft .NET Framework, Versión 2.0.50727.3082] Copyright (C) Microsoft Corporation 2007. Todos los derechos reservados.
La construcción comenzó el 1.7.2010 8:28:10. Proyecto "SolutionPath \ Solution.sln" en el nodo 0 (Reconstruir objetivo t (s)). SolutionPath \ Solution.sln: error MSB4126: La configuración de solución especificada "Release | x86" no es válida. Especifique una configuración de solución válida utilizando las propiedades de Configuración y Plataforma (por ejemplo, MSBuild.exe Solution.sln / p: Configuration = Debug / p: Platform = "Any CPU") o deje esas propiedades en blanco para usar la configuración de solución predeterminada. Proyecto de construcción finalizado "SolutionPath \ Solution.sln" (Reconstruir tget (s)) - FALLIDO.
Construcción fallida.
"SolutionPath \ Solution.sln" (Objetivo de reconstrucción) (1) -> (Objetivo ValidateSolutionConfiguration) -> SolutionPath \ Solution.sln: error MSB4126: La configuración de solución especificada "Release | x86" no es válida. Especifique una configuración de solución válida utilizando las propiedades de Configuración y Plataforma (p. Ej. MSBuild.ex e Solution.sln / p: Configuration = Debug / p: Platform = "Any CPU") o deje esas propiedades en blanco para usar la configuración de solución predeterminada.
0 Warning(s) 1 Error(s)
Tiempo transcurrido 00: 00: 00.03
Si intento compilarlo para x86 / x64 con devenv, funciona perfectamente, sin embargo, estoy tratando de configurar un servidor de compilación sin instalar todas las versiones necesarias de Visual Studio. Por cierto, si hay una mejor herramienta gratuita (que admite .NET Framework 4), me encantaría saberlo.
Win32
mientras que moden .NET usax86
Respuestas:
Si desea construir su solución para x86 y x64 , su solución debe estar configurada para ambas plataformas. En realidad solo tienes una configuración Any CPU .
Cómo verificar la configuración disponible para un proyecto
Para verificar la configuración disponible para un proyecto determinado, abra el archivo del proyecto (
*.csproj
por ejemplo) y busque unPropertyGroup
a la derechaCondition
.Si desea construir en
Release
modo parax86
, debe tener algo como esto en su archivo de proyecto:Cómo crear y editar la configuración en Visual Studio
(fuente: microsoft.com )
(fuente: msdn.com )
(fuente: msdn.com )
Cómo crear y editar la configuración (en MSDN)
fuente
Win32
lugar de,x86
por ejemplo, losCMake
generados hacen (libssh2
usosCMake
).En MSBuild o Teamcity, use la línea de comando
o use una forma más corta:
Sin embargo, de todos modos necesita configurar la plataforma en su proyecto, vea la respuesta de Julien Hoarau.
fuente
Platform="Any CPU"
oPlatform="Mixed Platforms"
para aquellos que lo necesitan.Si está tratando de hacer esto desde la línea de comandos, es posible que se encuentre con un problema en el que se configura una variable de entorno de toda la máquina 'Plataforma' para usted y trabaja en su contra. Puedo reproducir esto si uso la ventana de comando VS2012 en lugar de una ventana de comando de Windows normal.
En el símbolo del sistema, escriba:
En una ventana de comando VS2012, tengo un valor de 'X64' preestablecido. Eso parece interferir con lo que sea que esté en mi archivo de solución.
En una ventana de comando normal, el comando 'set' da como resultado un mensaje de "variable no definida" ... lo cual es bueno.
Si el resultado de su comando 'set' anterior no devuelve ningún valor de variable de entorno, debería estar listo.
fuente
Para VS2017 y 2019 ... con los archivos de proyecto SDK de la biblioteca central moderna , la plataforma se puede cambiar durante el proceso de compilación. Aquí hay un ejemplo para cambiar a la
anycpu
plataforma, justo antes de que seCoreCompile
ejecute la tarea integrada :En mi caso, estoy construyendo un FPGA con
BeforeTargets
yAfterTargets
tareas, pero compilando una aplicación C # en generalCoreCompile
. (en parte porque es posible que desee algún tipo de aplicación de línea de comandos, y en parte porque no pude descubrir cómo omitir o anularCoreCompile
)Para compilar para múltiples archivos binarios concurrentes, como x86 y x64: se necesitaría una tarea de compilación manual separada o dos archivos de proyecto separados con la configuración respectiva
<PlatformTarget>x86</PlatformTarget>
y<PlatformTarget>x64</PlatformTarget>
en el ejemplo anterior.fuente