如何使用 MSBuild 按特定顺序在解决方案中构建项目?

Posted

技术标签:

【中文标题】如何使用 MSBuild 按特定顺序在解决方案中构建项目?【英文标题】:How can i build projects in a solution in a certain order using MSBuild? 【发布时间】:2019-11-28 10:33:27 【问题描述】:

我有以下 msbuild 命令行: msbuild test.sln /t:project8;project5;project1;project9;project10;project20;project2 /p:Configuration="Release" /p:OutputPath=C:\ProjectDlls

这会按照指定的顺序构建它们吗?或者我可以像在 Visual Studio IDE 中一样指定顺序)右键单击 sln 和构建顺序)

我想按以下顺序构建 项目1 项目8 项目10 项目20 项目2 项目9 项目5

【问题讨论】:

您好,您问题中提到的这些项目之间的关系(项目参考、项目依赖)是什么?影响实际运行顺序很重要:-) 【参考方案1】:

这会按照指定的顺序构建它们吗?

如果这些项目之间没有依赖关系。他们将按照您在命令中设置的顺序运行。 (对于 VS2017,它可以工作)

对于 VS2017 和 VS2019(msbuild 15.0,16.0):

msbuild test.sln /t:project1;project8;project10;project20;project2;project9;project5 /p:Configuration="Release" /p:OutputPath=C:\ProjectDlls /m:1

如果你使用这个命令,它们会按照你想要的顺序执行。(如果你不按其他顺序添加项目引用或项目依赖!)

并添加/m:1 以确保项目一个一个构建。

我想按以下顺序构建 project1 project8 project10 project20 project2 project9 project5.

除了在命令中指定顺序外,您还可以指定这些项目之间的项目依赖关系或项目引用。

msbuild(15.0及以上)会识别项目之间的关系,并按照与关系匹配的顺序构建项目。

所以实际上命令中的顺序、项目依赖项、项目引用都会影响真正的构建顺序。避免使用所有这 3 种方式来设置顺序,它可能会弄乱构建...

【讨论】:

【参考方案2】:

如上所示在命令行中指定顺序,总是错误。我以前从未见过这个,它就像一个创可贴。它只是涵盖了真正的问题。

您应该使用以下方法之一:

    在visual studio中指定构建顺序,右键点击解决方案,选择“构建顺序”。 使用项目引用来指定一个项目依赖于另一个项目。

【讨论】:

以上是关于如何使用 MSBuild 按特定顺序在解决方案中构建项目?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Msbuild 和 devenv 在项目解决方案下构建特定的 Visual Studio 项目

如何让 Jest 按特定顺序运行测试?

如何使用 MSBuild 构建具有 VS2010 配置的 VS2015 解决方案?

c++ - 按特定顺序排列向量元素

如何使用python按特定顺序对文件名进行排序

如何按特定顺序对 .then() 调用进行排序? [复制]