【发布时间】:2016-04-18 13:01:28
【问题描述】:
当我为 ARM 构建它时,我需要从构建管道中跳过所有以“.UnitTests”结尾的项目。
如果我为 x86 构建,我需要构建它,但排除其他项目?
是否可以通过某种规则从构建过程中跳过一些项目?
【问题讨论】:
-
有趣的问题,我也有兴趣回答。也许this answer 可能会有所帮助。连同this article.
标签: msbuild windows-phone
当我为 ARM 构建它时,我需要从构建管道中跳过所有以“.UnitTests”结尾的项目。
如果我为 x86 构建,我需要构建它,但排除其他项目?
是否可以通过某种规则从构建过程中跳过一些项目?
【问题讨论】:
标签: msbuild windows-phone
执行此操作的 msbuild 方法是使用 Visual Studio 中的 Configuration Manager (Build -> Configuration Manager) 将项目映射到解决方案配置/平台。
在Configuration Manager:
选择 ARM 作为 Active Solution Platform 并取消选中所有 *.UnitTests 项目的 Build 并确保其他项目已选中 Build。
选择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>
根据您的需要调整构建目标或选择的项目。
【讨论】:
msbuild /p:Configuration=Debug /p:Platform=x86。如果您想要更多自定义逻辑来选择要构建的项目,那么您可能需要一个自定义 msbuild 文件来为您执行此操作。我会更新答案以包含它。
.sln 文件并根据.sln 文件中的配置+平台映射从中生成一个msbuild 项目文件。您可以从命令行选择构建的配置+平台。