如何在使用MSBuild编译.sln文件时,通过灵活的规则跳过项目?

3
我需要在构建ARM时跳过所有以“.UnitTests”结尾的项目,但如果我为x86构建,则需要构建它,但排除其他项目?
是否可以通过某种规则从构建过程中跳过某些项目?

有趣的问题,我也很感兴趣。也许这个答案可以帮到你:https://dev59.com/YGMm5IYBdhLWcg3wT9qU#17712386。再加上这篇文章:http://www.codeproject.com/Tips/177770/Creating-MSBuild-projects-from-sln-files。 - Nikerboker
1个回答

2
使用msbuild的方法是使用Visual Studio中的“配置管理器”(“生成 -> 配置管理器”)来将项目映射到解决方案的配置/平台。
在“配置管理器”中:
1. 将“ARM”选择为“活动解决方案平台”,取消所有“*.UnitTests”项目的“构建”选项,并确保其他项目已选中“构建”。
2. 选择“x86”作为“活动解决方案平台”,根据要构建的项目选中/取消“构建”选项。
这意味着每当您为“平台=ARM”构建解决方案时,除了“*.UnitTests”之外的所有项目都将被构建。对于“Platform=x86”也是如此。
您可以在这里阅读更多信息。
更新:
如果您需要更多自定义逻辑来选择要构建的项目,则可以创建一个新的顶级构建文件,例如:
<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的方式。 - zeromus
我知道这个,但我正在寻找一种在CI服务器上动态更改它而不是使用静态配置的方法。 - Viacheslav Smityukh
在您的 CI 服务器上,您可以通过命令行参数选择配置+平台进行构建:msbuild /p:Configuration=Debug /p:Platform=x86。如果您想要更多自定义逻辑来选择要构建的项目,则需要一个自定义的 msbuild 文件来实现。我会更新答案以包括这一点。 - radical
@zeromus msbuild也支持相同的功能。 它会解析 .sln 文件并根据在 .sln 文件中找到的 config+platform 映射生成一个 msbuild 项目文件。 您可以从命令行中选择要构建的 config+platform。 - radical

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接