如何通过MSBuild构建.sln文件的灵活规则跳过项目?

时间:2016-04-18 13:01:28

标签: msbuild windows-phone

我需要跳过所有结束于" .UnitTests"当我为ARM构建它时,从构建管道。

如果我为x86构建,我需要构建它,但是排除其他项目吗?

是否可以通过某种规则跳过构建过程中的某些项目?

1 个答案:

答案 0 :(得分:2)

msbuild这样做的方法是使用Visual Studio中的Configuration ManagerBuild -> Configuration Manager)将项目映射到解决方案配置/平台。

Configuration Manager

  1. 选择ARM作为Active Solution Platform并取消选中所有Build项目的*.UnitTests,并确保已检查其他项目Build

  2. 根据您要构建的项目,选择x86作为Active Solution Platform检查/取消选中Build

  3. 这意味着无论何时为Platform=ARM构建解决方案,都会构建除*.UnitTests之外的所有项目。同样适用于Platform=x86

    您可以详细了解here

    更新

    如果您需要更多自定义逻辑来选择要构建的项目,那么您可以创建一个新的顶级构建文件,如:

    <Project ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
        <ItemGroup Condition="'$(Platform)' == 'ARM'">
                <ARMProjects Include="abc\*.csproj" Exclude="**\*.UnitTests.csproj"/>
                <ARMProjects Include="def\*.csproj" Exclude="**\*.UnitTests.csproj"/>
        </ItemGroup>
    
        <ItemGroup Condition="'$(Platform)' == 'x86'">
             <!-- Create a group named X86Projects and select the projects as you need to -->
        </ItemGroup>
    
        <Target Name="Build">
             <MSBuild Project="@(ARMProjects)" Targets="Build" Condition="'$(Platform)' == 'ARM'"/>
             <MSBuild Project="@(X86Projects)" Targets="Build" Condition="'$(Platform)' == 'x86'"/>
        </Target>
    </Project>
    

    根据您的需要调整构建目标或项目。