Visual Studio构建步骤和MSBuild构建步骤的区别

33

我正在创建一些构建定义,唯一看到 Visual Studio 构建步骤和 MSBuild 构建步骤之间的区别是 VS 构建步骤会将 Visual Studio 版本添加到构建中。

有人可以解释更多的区别吗?

3个回答

29

正如Daniel所说,它们几乎是相同的。主要区别就像你发现的那样:Visual Studio Build步骤将Visual Studio版本添加到构建中。

我应该使用Visual Studio Build步骤还是MSBuild步骤?

如果您正在构建一个解决方案,在大多数情况下,您应该使用Visual Studio Build步骤。此步骤会自动执行以下操作:

  • 为您设置/p:VisualStudioVersion属性。这会强制MSBuild使用一组目标,从而增加成功构建的可能性。

  • 指定MSBuild版本参数。

在某些情况下,您可能需要使用MSBuild步骤。例如,如果您正在独立于解决方案构建代码项目,则应使用它。


1
当微软拒绝更新一个不到2年的程序以适应新的Visual Studio版本时,您还必须使用msbuild-task。 - StingyJack
我们不得不转向MS Build,因为Visual Studio忽略了SSDT项目之间的数据库引用。 - m12lrpv
两者都需要安装Visual Studio吗? - Rod
此外,MSBuild 忽略解决方案配置,例如,它将构建解决方案中的所有项目,而不管在 VS 配置管理器 UI 中是否选中了“生成”。 - doveryai


7
我看到这个问题涉及到两个构建任务。
但由于当人们搜索MSBuild和VS Build之间的区别时,谷歌会突出显示这个问题(不是Buildpipeline任务),我想引用微软的一句话:
“Visual Studio builds vs. MSBuild.exe builds”
Visual Studio构建与通过MSBuild直接调用的构建之间存在一些显著差异,无论是通过MSBuild可执行文件还是使用MSBuild对象模型启动构建。Visual Studio管理Visual Studio构建的项目构建顺序;它仅在单个项目级别调用MSBuild,并且在这种情况下,会设置几个布尔属性(BuildingInsideVisualStudio、BuildProjectReferences),这些属性会显着影响MSBuild的操作。在每个项目内部,执行方式与通过MSBuild调用时相同,但区别在于引用的项目。在MSBuild中,当需要引用项目时,实际上会进行构建;也就是说,它运行任务和工具,并生成输出。当Visual Studio构建发现引用的项目时,MSBuild只返回来自引用项目的预期输出;它让Visual Studio控制这些其他项目的构建。Visual Studio确定构建顺序,并单独调用MSBuild(根据需要),所有这些都完全在Visual Studio的控制下。
另一个差异出现在使用解决方案文件调用MSBuild时,MSBuild会解析解决方案文件,创建标准的XML输入文件,对其进行评估,并将其作为项目执行。在任何项目之前执行解决方案构建。当从Visual Studio构建时,这些都不会发生;MSBuild从未看到解决方案文件。因此,解决方案构建自定义(使用before.SolutionName.sln.targets和after.SolutionName.sln.targets)仅适用于MSBuild.exe或对象模型驱动,而不适用于Visual Studio构建。
来源:learn.microsoft.com

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