【问题标题】:Can Microsoft.Build.BuildEngine be multithreadedMicrosoft.Build.BuildEngine 可以多线程吗
【发布时间】:2013-03-08 23:48:16
【问题描述】:

我有许多 Visual Studio 解决方案要构建。

能否使用 Microsoft.Build.BuildEngine 一次构建多个解决方案(即通过多线程)?

我知道它有一些 STAThread 要求,尽管我从来没有完全理解这对我的程序意味着什么。

编辑:让我澄清一下。我知道 MSBuild 可以在解决方案中进行项目的多线程构建。我的问题是Microsoft.Build.BuildEngine.Engine 是否可以被不同的线程用来构建不同的解决方案/项目。

我尝试在不同的线程中创建单独的引擎,但没有成功。当我尝试在一个线程中使用一个引擎时,它起作用了。

Microsoft.Build.BuildEngine .NET 库能否一次构建多个项目/解决方案?

【问题讨论】:

  • 你在使用 TFS 吗? TFS Build 可以配置为在一个或多个构建服务器上一次构建多个构建。
  • 我相信 BuildEngine 使用 MSBuild。但是不,我没有使用 TFS。
  • MSBUILD 可以从 TFS2010/2012 构建中调用,并且可以传递参数以使其使用多个线程。
  • 多线程环境下运行失败,为什么不切换到多进程呢?
  • 除非您从任务中调用 COM 的东西,否则忽略 STAThread 警告应该是安全的(无论如何根据我的经验)。

标签: c# .net multithreading visual-studio msbuild


【解决方案1】:

这取决于你在做什么。是的,您可以进行多个并行项目构建(在 VS 中转到工具 -> 选项 -> 项目和解决方案 -> 构建和运行)。如果您正在运行 MSBuild,则可以使用 /m[:number] 命令。至于为支持 Microsoft.Build.Construction/Microsoft.Build.Evaluation/Microsoft.Build.Execution 而弃用的 BuildEngine,我相信 BuildParameters.MaxNodeCount 是设置要使用的线程数的原因。虽然我个人建议只运行 msbuild 本身或使用 IDE,但它要简单得多。

【讨论】:

  • 在 .NET 2.0 中,它没有被弃用,这就是我正在使用的。我应该提到这一点。而且使用 IDE 并不容易自动构建。从 C# 手动创建进程并不像使用为此目的而创建的库那么优雅。
猜你喜欢
  • 2019-02-11
  • 2012-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-08
  • 1970-01-01
  • 2011-04-19
相关资源
最近更新 更多