【问题标题】:How to skip projects a by flexible rule on build of a .sln file by MSBuild?如何通过 MSBuild 构建 .sln 文件的灵活规则跳过项目?
【发布时间】:2016-04-18 13:01:28
【问题描述】:

当我为 ARM 构建它时,我需要从构建管道中跳过所有以“.UnitTests”结尾的项目。

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

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

【问题讨论】:

标签: msbuild windows-phone


【解决方案1】:

执行此操作的 msbuild 方法是使用 Visual Studio 中的 Configuration Manager (Build -> Configuration Manager) 将项目映射到解决方案配置/平台。

Configuration Manager

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

  2. 选择x86 作为Active Solution Platform 选中/取消选中Build,具体取决于您要构建的项目。

这意味着每当您为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>

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

【讨论】:

  • 这对一些读者来说可能是有用的建议,但这是 VS 的做法,而不是 msbuild 的做法。
  • 我知道,但我正在寻找一种方法在 CI 服务器上动态更改它,而不是使用静态配置。
  • @ViacheslavSmityukh 在您的 CI 服务器上,您可以通过命令行参数选择要构建的配置+平台:msbuild /p:Configuration=Debug /p:Platform=x86。如果您想要更多自定义逻辑来选择要构建的项目,那么您可能需要一个自定义 msbuild 文件来为您执行此操作。我会更新答案以包含它。
  • @zeromus msbuild 也支持同样的事情。它解析.sln 文件并根据.sln 文件中的配置+平台映射从中生成一个msbuild 项目文件。您可以从命令行选择构建的配置+平台。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-19
  • 2012-09-03
  • 2010-12-02
  • 1970-01-01
  • 2017-06-09
  • 1970-01-01
相关资源
最近更新 更多