排序项目/解决方案构建和cmd文件在自定义MSBuild文件中执行



我需要将一系列步骤结合在一起,其中包括构建解决方案,项目和使用自定义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

做。

最新更新