我有两个在Teambuild中构建的解决方案,一个是应用程序本身,另一个是WiX安装程序。我想使用“Any CPU”构建配置和使用“x86”的安装程序构建应用程序。我首先在项目文件中列出了“Any CPU”解决方案,但Teambuild始终首先构建“x86”解决方案。
我正在设置BuildSolutionsInParallel = false,但它仍然按反向列出的顺序构建解决方案。如果我将第一个解决方案更改为“混合平台”,它可以正常工作。如何按照项目文件中列出的顺序获取构建解决方案?
<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>
答案 0 :(得分:2)
可以为属于同一解决方案的项目设置项目构建顺序。在这种情况下,由于无关的原因,项目需要属于两种不同的解决方案。
I've discovered here“混合平台”解决方案中的C#项目将构建为“任何CPU”,因此解决方案是始终使用Teambuild项目文件中的“混合平台”。
答案 1 :(得分:2)
这里的问题是,按照惯例,任何CPU的处理方式都与其他配置略有不同 - 例如,它被排除在输出目录层次结构之外。然后,在Team Build目标文件中,有一个名为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>
此目标分两批处理传入的ConfigurationToBuild项目组 - 任何CPU和其他所有内容。因此,生成的ConfigurationList项目组的排序与原始ConfigurationToBuild项目组不同,所有任何CPU配置都在所有非任何CPU配置之后。
如果配置顺序很重要,解决方法是为所有解决方案定义新的解决方案配置 - 请参阅上面引用的博客文章以获取相关说明。例如,您可以定义一个名为TFS的配置,它基于Any CPU解决方案的Any CPU,Win32上的那些解决方案等。然后在TfsBuild.proj文件中,您只需在ConfigurationToBuild项目组中包含这一个配置。当TFS Build尝试为任何CPU构建Win32配置时,这将有很好的副作用,摆脱你现在可能正在获得的各种“无效配置”警告,反之亦然。
答案 2 :(得分:0)
好的,我不确定它是否与Teambuild相同但是如何通过“Project - &gt; Project Build Order”设置项目的构建顺序?
答案 3 :(得分:0)
我刚刚发布了一个类似的问题,因为它似乎是同一个问题,但与任何CPU没有任何关系。这有没有得到解决?