0

我需要将一堆步骤连接在一起,这些步骤包括使用自定义MSBuild文件构建解决方案,项目和运行.cmd文件。排序在自定义MSBuild文件中执行的项目/解决方案构建和cmd文件

我在这第一关低于:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PropertyGroup> 
     <Configuration>Release</Configuration> 
     <Platform>AnyCPU</Platform> 
    </PropertyGroup> 
    <ItemGroup> 
     <ProjectsToBuild Include="..\Hosts\solution1.sln"></ProjectsToBuild> 
     <ProjectsToBuild Include="..\..\solution2.sln"></ProjectsToBuild> 
     <ProjectsToBuild Include="helper1.csproj"></ProjectsToBuild> 
     <ProjectsToBuild Include="..\..\Sandboxes\helper2.sln"></ProjectsToBuild> 
     <Exec Include="" Command="CALL GetFiles.cmd"/> 
     <ProjectsToBuild Include="wix\proc\prod.wixproj"></ProjectsToBuild> 
     <Exec Command="CALL final.cmd"/> 
    </ItemGroup> 
    <Target Name="Build"> 
     <MSBuild Projects="@(ProjectsToBuild)" Targets="Build"> 
     <Output ItemName="ProjectOutputs" TaskParameter="TargetOutputs"/> 
    </MSBuild> 
    <Message Text="@ProjectOutputs"/> 
    </Target>  
</Project> 

这导致了一个错误,因为Exec的元素是放错了地方。

基本上,我需要建立solution1.sln,solution2.sln,helper1.csproj和helper2.sln(按顺序),然​​后运行该文件GetFiles.cmd,然后构建prod.wixproj其次是在运行了最后。 cmd文件。

我已经看过MSDN(hereherehere),a blog,并通过各种计算器的问题(包括thisthisthisthis)浏览,但他们没有相当的地址是什么,我试图做的。这是我第一次使用MSBuild,所以有可能我错过了一些东西。将欣赏任何指针...

+0

您可以使用目标来控制构建解决方案的顺序。 http://msdn.microsoft.com/en-us/library/vstudio/ee216359.aspx – Nicodemeus 2013-05-14 01:18:51

+0

@NickCarlson谢谢。但是,我如何链接ItemGroup到Target? – Manas 2013-05-14 01:36:08

+0

ItemGroup也可以是Target的子节点。每个目标都可以拥有它自己负责的项目组。您可以在级别指定构建顺序,也可以通过级别上的各个*目标属性指定构建顺序。 (下) – Nicodemeus 2013-05-14 01:38:46

回答

2

由于ItemGroup节点可以是目标节点的子节点,因此将这些ItemGroup成员分解为单独的目标,然后使用DefaultTargets属性控制构建这些目标的顺序。

<?xml version="1.0" encoding="utf-8"?> 
<Project DefaultTargets="Target1;Target2;Target3" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5" > 
    <Target Name="Target1"> 
     <Message Text="Target 1" /> 
    </Target> 
    <Target Name="Target2"> 
     <Message Text="Target 2" /> 
    </Target> 
    <Target Name="Target3"> 
     <Message Text="Target 3" /> 
    </Target> 
</Project> 
1

构建项目已经在正确的顺序看:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PropertyGroup> 
    <Configuration>Release</Configuration> 
    <Platform>AnyCPU</Platform> 
    </PropertyGroup> 
    <ItemGroup> 
    <ProjectsToBuild Include="..\Hosts\solution1.sln"></ProjectsToBuild> 
    <ProjectsToBuild Include="..\..\solution2.sln"></ProjectsToBuild> 
    <ProjectsToBuild Include="helper1.csproj"></ProjectsToBuild> 
    <ProjectsToBuild Include="..\..\Sandboxes\helper2.sln"></ProjectsToBuild> 
    <ProjectsToBuild Include="wix\proc\prod.wixproj"></ProjectsToBuild> 

    </ItemGroup> 
    <Target Name="Build"> 
    <Exec Command="CALL GetFiles.cmd"/> 
    <Message Text="Build order: %(ProjectsToBuild.Identity)"/> 

    <MSBuild Projects="@(ProjectsToBuild)" Targets="Build"> 
     <Output ItemName="ProjectOutputs" TaskParameter="TargetOutputs"/> 
    </MSBuild> 
    <Message Text="@(ProjectOutputs)"/> 

    <<Exec Command="CALL final.cmd"/> 
    </Target> 
</Project> 

在开始的ItemGroup的顺序显示:

项目“C:\测试\ Testcode \构建\ testcode.msbuild“(节点1)(默认目标)。

体形:

建造顺序:.. \ \主机solution1.sln

建造顺序:.... \ solution2.sln

建造顺序:helper1.csproj

构建顺序:.... \ Sandboxes \ helper2.sln

构建顺序:wix \ proc \ prod.wixproj

全部完成。

+0

我需要在构建helper2.sln和prod.wixproj之间运行GetFiles.cmd。如果我错了,请纠正我,但在你的回答中看起来不是这样。 – Manas 2013-05-14 16:10:58

+0

如果是这种情况,那么你需要拆分项目组,并使用每个项目组调用msbuild目标。 – 2013-05-14 16:16:26

相关问题