argumentos - msbuild download
La tarea MSbuild falla porque la solución "Cualquier CPU" está construida fuera de servicio (4)
Ok, no estoy seguro si es lo mismo con Teambuild, pero ¿qué hay de establecer el orden de compilación de los proyectos a través de "Proyecto -> Orden de compilación del proyecto"?
Tengo dos soluciones para construir en Teambuild, una es la aplicación en sí, la otra es el instalador de WiX. Quiero construir la aplicación usando la configuración de compilación "Cualquier CPU" y el instalador usando "x86". Primero enumeré la solución "Cualquier CPU" en mi archivo de proyecto, pero Teambuild siempre crea primero la solución "x86".
Estoy configurando BuildSolutionsInParallel = false, pero sigue construyendo las soluciones en orden inverso. Si cambio la primera solución a "Plataforma mixta", funciona bien. ¿Cómo puedo obtener las soluciones para construir en el orden indicado en el archivo del proyecto?
<Project ...>
<PropertyGroup>
<!-- We want to build the install solution after the build solution -->
<BuildSolutionsInParallel>false</BuildSolutionsInParallel>
</PropertyGroup>
<ItemGroup>
<SolutionToBuild Include="$(BuildProjectFolderPath)/Pricer/Pricer.sln">
<Targets></Targets>
<Properties></Properties>
</SolutionToBuild>
<SolutionToBuild Include="$(BuildProjectFolderPath)/Pricer/Pricer.Install/Pricer.Install.sln">
<Targets></Targets>
<Properties></Properties>
</SolutionToBuild>
</ItemGroup>
<ItemGroup>
<ConfigurationToBuild Include="Release|Any CPU">
<FlavorToBuild>Release</FlavorToBuild>
<PlatformToBuild>Any CPU</PlatformToBuild>
</ConfigurationToBuild>
<ConfigurationToBuild Include="Release|x86">
<FlavorToBuild>Release</FlavorToBuild>
<PlatformToBuild>x86</PlatformToBuild>
</ConfigurationToBuild>
</ItemGroup>
</Project>
El problema aquí es que cualquier CPU se trata de forma ligeramente diferente, por convención, que otras configuraciones; por ejemplo, se deja fuera de las jerarquías de directorios de salida. En el archivo de objetivos de Team Build, entonces, hay un objetivo llamado ComputeConfigurationList:
<ItemGroup>
<!-- ConfigurationList for any Platform but Any CPU -->
<ConfigurationList Condition=" ''%(ConfigurationToBuild.PlatformToBuild)'' != ''Any CPU'' " Include="$(MSBuildProjectFile)">
<Properties>Configuration=%(ConfigurationToBuild.FlavorToBuild);Platform=%(ConfigurationToBuild.PlatformToBuild);TeamBuildOutDir=$(BinariesRoot)/%(ConfigurationToBuild.PlatformToBuild)/%(ConfigurationToBuild.FlavorToBuild)/;TeamBuildPublishDir=$(BinariesRoot)/%(ConfigurationToBuild.PlatformToBuild)/%(ConfigurationToBuild.FlavorToBuild)/</Properties>
</ConfigurationList>
<!-- ConfigurationList for Any CPU Platform -->
<ConfigurationList Condition=" ''%(ConfigurationToBuild.PlatformToBuild)'' == ''Any CPU'' " Include="$(MSBuildProjectFile)">
<Properties>Configuration=%(ConfigurationToBuild.FlavorToBuild);Platform=%(ConfigurationToBuild.PlatformToBuild);TeamBuildOutDir=$(BinariesRoot)/%(ConfigurationToBuild.FlavorToBuild)/;TeamBuildPublishDir=$(BinariesRoot)/%(ConfigurationToBuild.FlavorToBuild)/</Properties>
</ConfigurationList>
</ItemGroup>
Este objetivo procesa el grupo de elementos ConfigurationToBuild entrante en dos lotes: cualquier CPU y todo lo demás. El grupo de elementos de ConfigurationList resultante se ordena de manera diferente que el grupo de elementos ConfigurationToBuild original, con todas las configuraciones Any CPU que vienen después de todas las configuraciones de CPU que no sean Any.
La solución alternativa, si el orden de sus configuraciones es importante, es definir una nueva configuración de solución para todas sus soluciones: consulte la publicación de blog mencionada anteriormente para obtener instrucciones al respecto. Por ejemplo, podría definir una configuración llamada TFS basada en Cualquier CPU para sus soluciones Any CPU, en Win32 para esas soluciones, etc. Luego, en su archivo TfsBuild.proj, solo incluiría esta configuración en su grupo de elementos ConfigurationToBuild. Esto tendrá el bonito efecto secundario de deshacerse de las diversas advertencias de "configuración no válida" que probablemente esté recibiendo en este momento cuando TFS Build intente construir sus configuraciones de Win32 para cualquier CPU y viceversa.
Project Build Order se puede establecer para proyectos que pertenecen a la misma solución. En este caso, por razones no relacionadas, los proyectos deben pertenecer a 2 soluciones diferentes.
He descubierto aquí que un proyecto de C # en una solución de "Plataformas mixtas" se compilará como "Cualquier CPU", por lo que la solución es usar siempre "Plataformas mixtas" en el archivo de proyecto de Teambuild.
Acabo de publicar una pregunta similar, porque parece ser el mismo problema pero sin relación con AnyCPU. ¿Esto se resolvió alguna vez?
¿Por qué Tfs2010 construye mi proyecto Wix antes que cualquier otra cosa?