visual studio para new net destino create configuracion compilar administrador .net vb.net msbuild 64bit 32-bit

.net - para - solution platform visual studio



¿Cómo obligo a MSBuild a compilar para el modo de 32 bits? (8)

Después de experimentar exactamente el mismo problema, cambié de usar la versión de MSBuild en C:/WINDOWS/Microsoft.NET/Framework64 ... a la versión en C:/WINDOWS/Microsoft.NET/Framework (no 64 ) y cosas compiladas esta bien

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

He intentado una serie de parámetros de línea de comandos para MSBuild sin suerte:

  • / p: Plataforma = win32
  • / p: Plataforma = x86
  • / p: ProcessorArchitecture = x86

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


El Nant msbuild-Task responde a esta pregunta:

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


En caso de que esto ayude, utilicé esta línea de comando para construir mi objetivo de la 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 con el botón derecho en el nodo raíz -> Administrador de configuración . Debe definir una configuración para toda la solución que indique a cada proyecto que se construya como de 32 bits. (Nota: probablemente ya tengas uno si alguna vez has configurado al menos un proyecto para que se cree como de 32 bits). Para obtener un tutorial paso a paso, consulta la publicación en el blog de MSDN Configuraciones de la solución .

Luego, especifique la "plataforma" y el "sabor" .proj .targets archivos Team Build .proj / .targets . 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 tener varias combinaciones construidas. Copiaría / pegaría la cadena "Release | x86" (o lo que parezca) directamente desde su archivo .sln para asegurarse de que coincida exactamente; no puede obtenerlo directamente desde Solution Explorer.

En cuanto a tu comentario:

La evaluación de propiedad de MSBuild es bastante compleja ya que combina estilos declarativos e imperativos. Consulte la publicación de blog MSBuild Property Evaluation para más detalles. Prefiero no confiar en sus sutilezas.

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

Podría intentar configurar ConfigurationToBuild.PlatformToBuild directamente en la línea de comandos; podría funcionar, no estoy seguro. Pero definitivamente evitará que construyas más de una configuración en una sola definición de compilación. Por esta razón, sigo con mi consejo anterior.


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


Según MSDN , estás haciendo lo correcto. Parece /p:Platform=x86 , pero en realidad, tal vez es /p:PlatformTarget=x86 .

Intenta simplemente invocar MSBuild directamente con ese parámetro (asegúrate de que no sea un problema con tu archivo NAnt. Observa el resultado de compilación para la configuración de compilación correcta ( Depurar / Liberar ).


Si los ensamblados en sí mismos siempre serán de 32 bits, ¿por qué no agregar la configuración al archivo .vbproj? Eso sacará a MSBuild de la ecuación.

Simplemente agregue la siguiente línea al PropertyGroup inicial en el archivo .vbproj

<PlatformTarget>x86</PlatformTarget>


Una forma más práctica que uso para encontrar la propiedad correcta es abriendo uno de los archivos del proyecto .csproj (en el caso de c #) y veo la propiedad que se ve afectada cuando selecciona "x64" / "AnyCPU" / "x86" desde Visual stdio. Independientemente de la propiedad que se modifique, debe establecerlo desde la línea de comandos. Con Visual Studio 2015 parece ser <Platform>. Entonces puede invocar msbuild con el argumento / p: Platform = x64 y debería funcionar.