我的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>
答案 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安装程序。
希望这有帮助。