Pregunta

Estoy usando MSBuild (a través de hormiga) para compilar un montón de VB.NET Ensambles.Debido a que estos ensamblados dependen de COM Interop, debo garantizar que se ejecuten en modo de 32 bits en sistemas operativos de 64 bits.Puedo hacer que los ensamblados ejecutables se compilen en modo de 32 bits cambiando el proyecto en Visual Studio, pero realmente me gustaría poder forzar la compilación de todos los ejecutables en modo de 32 bits en el servidor de compilación.

Probé varios parámetros de línea de comandos para MSBuild sin suerte:

  • /p:Plataforma=win32
  • /p:Plataforma=x86
  • /p:Arquitectura del procesador=x86

¿Qué estoy haciendo mal?¿Existe alguna referencia a las propiedades que utiliza MSBuild al compilar proyectos de VB?

¿Fue útil?

Solución

Si los propios montajes siempre van a ser de 32 bits, por qué no añadir el valor al archivo .vbproj? Eso llevará MSBuild fuera de la ecuación.

Sólo tiene que añadir la siguiente línea a la PropertyGroup inicial en el archivo .vbproj

<PlatformTarget>x86</PlatformTarget>

Otros consejos

De acuerdo con MSDN , que estás haciendo lo correcto. Parece que /p:Platform=x86, pero en realidad, tal vez sea /p:PlatformTarget=x86.

Trate de simplemente invocar MSBuild directamente con ese parámetro (asegúrese de que no es un problema con el archivo de NAnt. Mira el resultado de generación para la configuración de generación derecha ( Depurar / Release ).

Sólo en caso de que esta ayuda, he usado esta línea de comandos para construir mi objetivo plataforma x86:

C:\Windows\Microsoft.NET\Framework\v2.0.50727\MSBuild.exe my.sln /t:build /p:Configuration=Release;Platform=x86

En el Explorador de soluciones, haga clic derecho en el nodo raíz -> Administrador de configuración.Debe definir una configuración para toda la solución que indique que cada proyecto se construya como de 32 bits.(Nota:probablemente ya tenga uno si alguna vez configuró al menos un proyecto para compilarlo en 32 bits). Para obtener un tutorial paso a paso, consulte la publicación del blog de MSDN. Configuraciones de soluciones.

Luego, especifica la "plataforma" y el "sabor" deseados en su Construcción de equipo .proj / .targets archivos.Por ejemplo:

<ConfigurationToBuild Include="Release|x86">
    <FlavorToBuild>Release</FlavorToBuild>
    <PlatformToBuild>x86</PlatformToBuild>
</ConfigurationToBuild>

Puede especificar más de una de estas secciones de propiedades para crear varias combinaciones.Copiaría/pegaría la cadena "Release|x86" (o lo que parezca) directamente desde su .sln archivo para asegurarse de que coincida exactamente; no puede obtenerlo directamente desde el Explorador de soluciones.

Respecto a tu comentario:

La evaluación de propiedades de MSBuild es bastante compleja ya que combina estilos declarativos e imperativos.Ver la publicación del blog Evaluación de propiedades de MSBuild para detalles.Prefiero no confiar en sus sutilezas.

Es cierto que las propiedades especificadas en la línea de comando deberían anular todo lo demás, pero Team Build tiene otra capa de complejidad. La tarea ComputeConfigurationList se llama repetidamente mediante una invocación recursiva de MSBuild, no como una tarea ordinaria..La forma en que lo logra es tomando propiedades ordinarias como PlatformToBuild y envolverlos en un conjunto de propiedades globales llamado ConfigurationToBuild.PlatformToBuild (etc.) que se generan sobre la marcha, una vez para cada configuración.Esto hace que el motor Team Build sea mucho más flexible internamente, pero también hace que sea más difícil piratear el comportamiento de la línea de comandos que desea.

Podrías intentar configurar ConfigurationToBuild.PlatformToBuild en la línea de comando directamente; podría funcionar, no estoy seguro.Pero definitivamente le impedirá crear más de una configuración en una única definición de compilación.Por esta razón, sigo con mi consejo anterior.

Después de experimentar el mismo problema exacto, he pasado de utilizar la versión de MSBuild a C:\WINDOWS\Microsoft.NET\Framework64 ... a la versión en C:\WINDOWS\Microsoft.NET\Framework (sin 64) y las cosas se compilan bien.

Para MSBuild versión 15 es / P: PlatformTarget = x86

La respuesta Nant msbuild-Tarea a esta pregunta:

<msbuild project="your.sln">
    <property name="PlatformTarget" value="x86" />
</msbuild>

Una forma más práctica que utilizo para encontrar la propiedad adecuada es mediante la apertura de uno de los proyectos .csproj  presentar (en el caso de C #) y ver la propiedad que se ve afectada cuando se selecciona "x 64" / "Cualquier CPU" / "x 86" de Visual stdio. Cualquiera que sea la propiedad que se cambia, es necesario establecer que a partir de la línea de comandos. Con Visual Studio 2015 parece ser . Por lo que puede invocar msbuild con el argumento / p:. Plataforma = 64 y debería funcionar

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top