MSBuild批处理 - 无法弄清楚如何仅为某些解决方案运行目标

时间:2009-10-27 19:52:08

标签: msbuild

我的TFSBuild.proj

中有类似的内容
<ItemGroup>
    <SolutionToBuild Include="$(BuildProjectFolderPath)/../../ProjectA/ProjectA.sln" />
    <SolutionToBuild Include="$(BuildProjectFolderPath)/../../x64 Installer/x64 Installer.sln" Condition="'$(Platform)' == 'x64' " />
    <SolutionToBuild Include="$(BuildProjectFolderPath)/../../x86 Installer/x86 Installer.sln" Condition="'$(Platform)' == 'x86' " />
    <ConfigurationToBuild Include="Release|x86">
        <FlavorToBuild>Release</FlavorToBuild>
        <PlatformToBuild>x86</PlatformToBuild>
    </ConfigurationToBuild>

    <ConfigurationToBuild Include="Release|x64">
        <FlavorToBuild>Release</FlavorToBuild>
        <PlatformToBuild>x64</PlatformToBuild>
    </ConfigurationToBuild>
</ItemGroup>  

我想覆盖BeforeCompile目标来运行我编写的自定义任务。自定义任务将获取ProjectA的输出和两个安装程序项目(Wix项目文件)使用的构建文件。如何让BeforeCompile目标仅针对这两个SolutionToBuild项执行?我假设这是关于目标批处理(因为我可以在我的任务上使用条件,但我没有得到它。

我尝试添加这样的内容以查看它是否可行,但只有第一个解决方案输出到日志中:

<Target Name="BeforeCompile" Outputs="%(SolutionToBuild.Identity)">
  <Message Text="Solution being built: %(SolutionToBuild.Identity)" />
</Target>

1 个答案:

答案 0 :(得分:3)

为什么不在构建实际的WiX安装之前编译ProjectA并准备所需的文件?

<ItemGroup>
        <SolutionToBuild Include="$(BuildProjectFolderPath)/../../x64 Installer/x64 Installer.sln" Condition="'$(Platform)' == 'x64' " />
        <SolutionToBuild Include="$(BuildProjectFolderPath)/../../x86 Installer/x86 Installer.sln" Condition="'$(Platform)' == 'x86' " />
        <ConfigurationToBuild Include="Release|x86">
                <FlavorToBuild>Release</FlavorToBuild>
                <PlatformToBuild>x86</PlatformToBuild>
        </ConfigurationToBuild>

        <ConfigurationToBuild Include="Release|x64">
                <FlavorToBuild>Release</FlavorToBuild>
                <PlatformToBuild>x64</PlatformToBuild>
        </ConfigurationToBuild>
</ItemGroup>

<Target Name="BeforeCompile">
  <MsBuild Projects="$(BuildProjectFolderPath)/../../ProjectA/ProjectA.sln"/>
  <CallTarget Targets="PrepareWiXFiles"/>
</Target>

这样你就不需要做令人讨厌的名字检查了。

更好的方法是将此版本拆分为几个小版本,这将提高可维护性。例如,您可以创建一个构建ProjectA并将其输出存储到网络位置(或本地位置)的构建。然后创建第二个构建,它将从ProjectA收集输出准备WiX文件并构建Wix安装程序。

希望这有帮助。