MSBuild-我可以在子目录中编译所有解决方案吗?

时间:2018-07-28 21:03:31

标签: msbuild

MSBuild中是否有一种方法可以编译指定父项下的文件夹,子文件夹和sub ...中的所有解决方案?

我们的图书馆提供了许多示例程序。我想添加到构建过程中,我们知道它们都可以编译。

1 个答案:

答案 0 :(得分:2)

您可以为targetsrestore操作创建自己的build。例如:

<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" InitialTargets="EntryRestore" DefaultTargets="EntryMSBuild">

  <ItemGroup>
    <SolutionFile Include="./**/*.sln"/>
  </ItemGroup>

  <Target Name="EntryRestore">

    <Message Text="-----Entry-----" Importance="high"/>
    <Message Text="    Restore    " Importance="high"/>
    <Message Text="-----Entry-----" Importance="high"/>

    <MSBuild Projects="%(SolutionFile.Identity)" Targets="restore"/>
  </Target>

  <Target Name="EntryMSBuild">

    <Message Text="-----Entry-----" Importance="high" />
    <Message Text="     Build     " Importance="high" />
    <Message Text="-----Entry-----" Importance="high" />

    <MSBuild Projects="%(SolutionFile.Identity)" Targets="build"  />
  </Target>

</Project>

项目SolutionFile将包含位于当前目录及其子目录中的所有.sln文件的路径。您也可以在CLI中定义路径并执行相对路径搜索。

<ItemGroup>
  <SolutionFile Include="$(MyDir)/**/*.sln"/>
</ItemGroup>

MSBuild任务启动MSBuild以执行指定的目标。在我们的cas中,它们是restorebuild。该任务使用了“ batching”,它允许按元数据遍历项目。


&"D:\Visual Studio\MSBuild\15.0\Bin\msbuild.exe" .\Make.targets

MSBuild targets | Item element | Item metadata in task batching | MSBuild task