【发布时间】:2017-02-01 17:31:40
【问题描述】:
我正在创建一些构建定义,我看到的 Visual Studio 构建步骤和 MSBuild 构建步骤之间的唯一区别是 VS 构建步骤将 Visual Studio 版本添加到构建中。
有人可以解释更多不同之处吗?
【问题讨论】:
标签: visual-studio tfs msbuild tfs-2015
我正在创建一些构建定义,我看到的 Visual Studio 构建步骤和 MSBuild 构建步骤之间的唯一区别是 VS 构建步骤将 Visual Studio 版本添加到构建中。
有人可以解释更多不同之处吗?
【问题讨论】:
标签: visual-studio tfs msbuild tfs-2015
他们几乎和丹尼尔提到的一样。主要区别与您发现的一样:Visual Studio Build step add Visual Studio Version to the build。
我应该使用 Visual Studio Build 步骤还是 MSBuild 步骤?
如果您正在构建解决方案,在大多数情况下,您应该使用 Visual Studio 构建步骤。这一步自动进行:
为您设置 /p:VisualStudioVersion 属性。这会强制 MSBuild 使用一组特定的目标来增加 成功构建的可能性。
指定 MSBuild 版本参数。
在某些情况下,您可能需要使用 MSBuild 步骤。例如,你 如果您正在构建代码项目而不是解决方案,则应该使用它。
【讨论】:
我看到这个问题是关于两个构建任务的。
但由于谷歌会在人们搜索 MSBuild 和 VS Build(而不是 Buildpipeline 任务)之间的区别时突出显示这个问题,所以我想添加来自 Microsoft 的这句话:
Visual Studio 构建与 MSBuild.exe 构建
项目构建时间之间存在一些显着差异 Visual Studio 与直接调用 MSBuild 时的对比,无论是通过 MSBuild 可执行文件,或者当您使用 MSBuild 对象模型启动时 一个构建。 Visual Studio 管理 Visual 的项目构建顺序 工作室建造;它只在单个项目级别调用 MSBuild, 当它发生时,几个布尔属性 (
BuildingInsideVisualStudio,BuildProjectReferences) 设置为 显着影响 MSBuild 的功能。在每个项目内部,执行 发生与通过 MSBuild 调用时相同,但不同之处在于 与引用的项目一起出现。在 MSBuild 中,当引用项目时 是必需的,实际发生了构建;也就是说,它运行任务和 工具,并生成输出。当 Visual Studio 生成发现 引用的项目,MSBuild 只返回预期的输出 参考项目;它让 Visual Studio 控制构建 那些其他项目。 Visual Studio 确定构建顺序和 单独调用 MSBuild(根据需要),完全在 Visual 工作室的控制。当使用解决方案调用 MSBuild 时,会出现另一个差异 文件,MSBuild 解析解决方案文件,创建标准 XML 输入 文件,对其进行评估,并将其作为项目执行。解决方案构建 在任何项目之前执行。从 Visual Studio 构建时,没有 发生这种情况; MSBuild 永远不会看到解决方案文件。作为一个 结果,解决方案构建定制(使用 before.SolutionName.sln.targets 和 after.SolutionName.sln.targets) 仅适用于 MSBuild.exe 或对象模型驱动,不适用于 Visual Studio 构建。
【讨论】: