我需要将一系列步骤结合在一起,其中包括构建解决方案,项目和使用自定义MSBuild文件运行。cmd文件。
我的第一步是在下面:
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration>Release</Configuration>
<Platform>AnyCPU</Platform>
</PropertyGroup>
<ItemGroup>
<ProjectsToBuild Include="..Hostssolution1.sln"></ProjectsToBuild>
<ProjectsToBuild Include="....solution2.sln"></ProjectsToBuild>
<ProjectsToBuild Include="helper1.csproj"></ProjectsToBuild>
<ProjectsToBuild Include="....Sandboxeshelper2.sln"></ProjectsToBuild>
<Exec Include="" Command="CALL GetFiles.cmd"/>
<ProjectsToBuild Include="wixprocprod.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元素在错误的位置。
基本上,我需要构建解决方案。sln, solution2.sln helper1。Csproj和helper2。sln(依次),然后运行文件GetFiles。Cmd,然后构建prod.wixproj,然后运行final。cmd文件。
我看了MSDN(这里,这里,这里),一个博客,并浏览了各种stackoverflow问题(包括这个,这个,这个,这个),但没有一个能很好地解决我想做的事情。这是我第一次使用MSBuild,所以我可能错过了一些东西。
由于ItemGroup节点可以是Target节点的子节点,因此将这些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>
构建项目的顺序已经正确,请参见:
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration>Release</Configuration>
<Platform>AnyCPU</Platform>
</PropertyGroup>
<ItemGroup>
<ProjectsToBuild Include="..Hostssolution1.sln"></ProjectsToBuild>
<ProjectsToBuild Include="....solution2.sln"></ProjectsToBuild>
<ProjectsToBuild Include="helper1.csproj"></ProjectsToBuild>
<ProjectsToBuild Include="....Sandboxeshelper2.sln"></ProjectsToBuild>
<ProjectsToBuild Include="wixprocprod.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(默认目标).
构建:构建顺序:..Hostssolution1.sln
构建顺序:....solution2.sln
构建顺序:helper1.csproj
构建顺序:....Sandboxeshelper2。sln
构建顺序:wixprocprod.wixproj
做。