Tengo una solución x86 Visual Studio con muchos archivos de proyecto. Algunos de los archivos DLL están diseñados para funcionar como complementos para otras aplicaciones en el sistema de un usuario. Estamos ampliando algunas de las DLL para poder admitir aplicaciones de 64 bits. Lo que me gustaría hacer es configurar la solución/proyectos para que solo presionando "Build" compile las versiones x86 y x64 de esas DLL. La solución contiene proyectos C++ y C#. Me doy cuenta de que "Batch Build" es capaz de construir ambos, aunque sería más conveniente si los desarrolladores pudieran simplemente hacer clic en el mismo botón que tenían anteriormente y tener todos los archivos DLL de salida generados.¿Usa una sola solución de Visual Studio para compilar tanto x86 como x64 al mismo tiempo?
Aquí hay un par de las modificaciones que he tratado de un proyecto de prueba, pero no han llegado a trabajar:
He intentado modificar el <Target Name="AfterBuild">
intentar:
<Target Name="AfterBuild" Condition=" '$(Platform)' == 'x86' ">
<PropertyGroup>
<Platform>x64</Platform>
<PlatformTarget>x64</PlatformTarget>
</PropertyGroup>
<CallTarget Targets="Build"/>
</Target>
pero que se traduce en el siguiente error:
C:\Windows\Microsoft.NET\Framework\v3.5\Microsoft.Common.targets(565,5): error MSB4006: There is a circular dependency in the target dependency graph involving target "Build".
creo que mis condiciones impedirán la recursividad infinita, pero yo entiendo como MSBuild no podía verlo de esa manera.
También he intentado:
<Project DefaultTargets="MyBuild86;MyBuild64" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
...
<Target Name="MyBuild86">
<PropertyGroup>
<Platform>x86</Platform>
<PlatformTarget>x86</PlatformTarget>
</PropertyGroup>
<CallTarget Targets="Build"/>
</Target>
<Target Name="MyBuild64">
<PropertyGroup>
<Platform>x64</Platform>
<PlatformTarget>x64</PlatformTarget>
</PropertyGroup>
<CallTarget Targets="Build"/>
</Target>
pero mi DefaultTargets
parece ser ignorado desde el IDE de Visual Studio.
pasado, he intentado crear un proyecto independiente que importe el primer proyecto:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform>x64</Platform>
<PlatformTarget>x64</PlatformTarget>
<ProductVersion>9.0.30729</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<OutputPath>..\$(Configuration)\x64\</OutputPath>
<ProjectGuid>{A885CAC3-2BBE-4808-B470-5B8D482CFF0A}</ProjectGuid>
</PropertyGroup>
<Import Project="BuildTest.csproj" />
</Project>
y esto hasta ahora ha mostrado el más prometedor. Sin embargo, Visual Studio parece ignorar mi configuración OutputPath
de este nuevo proyecto y en su lugar emite el exe/dll a la ruta especificada en el proyecto original. No hay ningún bloque PropertyGroup
que pueda ver que se está ejecutando en el proyecto original para anularlo, así que no estoy seguro de lo que está pasando.
Parece que funciona bastante bien, gracias. Ahora para descubrir algo similar para los proyectos C++ ... – PeteVasi
Funcionó bien para el proyecto C++. Cambié la plataforma de destino en condición de 'x86' a 'Win32' – Woodman
YMMV, pero para mí, las referencias del proyecto C++ no se volvieron a cargar y las bibliotecas estáticas que vinculaban objetivos relacionados no se volvieron a ejecutar y, por lo tanto, los enlaces se rompieron. Por desgracia, creo que volveré con el equivalente de la llamada dual 'msbuild'. – crazysim