【问题标题】:Build a solution folder with MSBuild使用 MSBuild 构建解决方案文件夹
【发布时间】:2011-09-09 05:10:13
【问题描述】:

我们有一个解决方案文件,其中包含一些解决方案文件夹:库、单元测试、应用程序等。

使用Visual Studio 2010,我们可以通过右键单击给定文件夹并使用“build”或“rebuild”来仅构建给定文件夹的项目。

这在开发人员的工作站上是完美的,我们希望在使用 MSBuild 的持续集成服务器上做同样的事情。

那么,我们可以使用 MSBuild 构建解决方案文件夹吗?

或者我们是否必须为每个文件夹创建一个专门的解决方案?

以下回复的结论是,没有任何内置方法可以做到这一点,但有一些解决方法:

  • 创建一个专门的解决方案,仅包含选定的项目,
  • 使用专用的 csproj 来构建选定的项目,
  • 在现有解决方案文件中添加一个将引用所选项目的新项目

我选择使用专用的解决方案文件,因为它的侵入性和技巧性更小,虽然不是更灵活(专用的 .csproj 解决方案应该提供完全控制)。

【问题讨论】:

  • 有很多方法可以获得这种能力,但不是解决方案的解决方案文件夹。意识到解决方案文件是 MSBuild 中的二等公民。如果您愿意在解决方案之外进行一些替代自定义,有办法做您想做的事,这是一种选择吗?
  • @Spider M9:感谢您花时间查看我的问题。欢迎任何选项,特别是如果比为每个文件夹使用专用解决方案文件更简单。
  • @Serious 确定一下:您想从解决方案中构建单个项目?
  • @Filburt:我想构建一组位于解决方案文件夹中的项目,而不仅仅是一个。
  • 当您构建解决方案时,它应该构建所有项目(甚至是解决方案文件夹中的项目),除非它们被排除在当前配置之外。同样,您可以通过在 .sln 文件上运行 msbuild 从命令行构建解决方案(及其所有项目)。您能否详细介绍一下您面临的问题?

标签: visual-studio visual-studio-2010 msbuild continuous-integration solution


【解决方案1】:

是的,您可以使用 MSBuild 构建解决方案文件夹。

msbuild "framework.sln" /t:First\Project:Build

将在名为First的文件夹中构建项目。 但是,磁盘文件夹和解决方案文件夹必须匹配(我在我的解决方案中尝试过,但它们不匹配)。

因此,您所要做的就是选择一个项目,该项目将该文件夹中的所有其他项目作为依赖项。

另见: MSBuild command-line reference

【讨论】:

  • 感谢您的指点。实际上,创建项目是另一种解决方案,但我更愿意避免将解决方案文件与纯构建内容混淆。因此,同样,专用解决方案文件似乎是侵入性较小的解决方案。
  • 不建议您这样做,我想如果您的文件夹包含相关项目,那么无论如何,一个人可能会履行这个角色,例如一个服务项目,但是感谢您提出这个问题,因为我从来不知道 msbuild 以这种方式工作,直到我想看看。就像你说的那样,每个构建输出一个解决方案可能是一个更好的解决方案。
【解决方案2】:

简短的回答是:

是的,如果你想建立特定的集合 项目(在 VS 中组合在一起 解决方案)使用普通的 MSBuild 你会 必须创建一个专用的 MSBuild .proj 用于每个特定的集合 您要构建的项目。

您不必创建(和维护)Visual Studio 解决方案来支持您的构建,但最终它是相同的(MSBuild .proj 与 Visual Studio 解决方案)。

我有一组 60 多个 .NET 项目 (.btprpj BizTalk) 的类似场景。为了在 Visual Studio 中进行开发,这些项目目前被组织在 12 个 Visual Studio 解决方案中。

为了自动构建和部署,我创建了一组 50 多个 MSBuild .proj 脚本,以针对我需要的每一个组件(或一组组件)。

MSBuild 为围绕 Visual Studio 项目的实际构建(从版本控制系统导出等)自动化所有内容提供了很多可能性。

【讨论】:

  • 使用解决方案似乎更有用,因为您可以使用 Visual 轻松操作它,尽管控制较少。
  • @Serious 实际上,我认为 MSBuild 脚本不像 VS 解决方案是一个优点;-)
猜你喜欢
  • 2012-12-16
  • 1970-01-01
  • 1970-01-01
  • 2011-05-08
  • 1970-01-01
  • 2012-09-21
  • 2010-12-13
  • 2023-03-17
  • 1970-01-01
相关资源
最近更新 更多