MSBuild批处理-Can';I don’我不知道如何使目标仅针对某些解决方案运行

MSBuild批处理-Can';I don’我不知道如何使目标仅针对某些解决方案运行,msbuild,Msbuild,我的TFSBuild.proj中有类似的内容 <ItemGroup> <SolutionToBuild Include="$(BuildProjectFolderPath)/../../ProjectA/ProjectA.sln" /> <SolutionToBuild Include="$(BuildProjectFolderPath)/../../x64 Installer/x64 Installer.sln" Condition="'$(Pla

我的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>  

释放
x86
释放
x64
我想重写beforecomile目标以运行我编写的自定义任务。自定义任务将从两个安装程序项目(Wix项目文件)使用的ProjectA和build文件中获取输出。如何使BeforeComile目标仅针对这两个SolutionToBuild项执行?我假设这是关于目标批处理的(因为我可以在任务中使用条件,但我不明白)

我尝试添加类似的内容以查看是否有效,但只有第一个解决方案输出到日志:

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

在构建实际的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>

释放
x86
释放
x64
这样,你就不需要做讨厌的姓名检查了

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


希望这能有所帮助。

Ok-我找到了BeforeCompileSolution任务,它是针对每个解决方案运行的,但我看到的唯一标识解决方案的东西是$(解决方案),它是解决方案的完整路径和文件名,并且不会直接与“$(BuildProjectFolderPath)进行比较/../../x86 Installer/x86 Installer.sln'结果表明,这比我最初得到的效果要好。