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

相關問題