能否指示MSBuild不实际构建代码仅输出构建执行计划?
如何让MSBuild不执行构建仅输出项目构建顺序
MSBuild 原生就支持该需求,不需要你自行调用API解析解决方案、遍历项目依赖手动生成依赖图,它内部完成依赖计算后可以直接输出顺序,全程不会触发实际的编译、拷贝等构建操作。
具体实现方法
单节点顺序构建模式下,直接在命令行执行以下命令即可:
msbuild 你的解决方案路径.sln /t:_GetBuildOrder /m:1 /v:n
参数说明:
/t:_GetBuildOrder:调用MSBuild处理解决方案时生成的临时元项目内置目标,这个目标仅做依赖顺序计算和输出,不会触发任何项目的实际构建逻辑/m:1:强制使用单节点构建模式,和你预期的顺序构建场景完全匹配,避免多节点并行调度导致输出顺序和实际单节点构建顺序不一致/v:n:设置日志输出级别为普通,控制台会直接打印按先后顺序排列的项目构建列表
如果你使用的是VS2017之前的老旧MSBuild版本,内置目标名可能为
__BuildOrder,替换上述命令中的目标名即可正常使用。
备用验证方案
如果上述目标在你的环境中不可用,还可以通过指定不存在的虚拟目标+详细构建摘要的方式拿到顺序:
msbuild 你的解决方案路径.sln /t:FakeDummyTarget /m:1 /v:m /ds
执行后MSBuild会因为找不到指定的虚拟目标,跳过所有实际构建动作,同时在日志末尾的构建摘要段落输出计算完成的项目构建顺序。
补充说明
上述方式拿到的构建顺序,和MSBuild实际执行单节点构建时采用的顺序完全一致,不需要你额外处理项目引用、解决方案依赖、手动设置的项目生成顺序等规则,所有逻辑都由MSBuild内置的依赖解析模块完成。
内容的提问来源于stack exchange,提问作者mark
相关产品推荐
相关产品推荐

