【问题标题】:msbuild.exe staying open, locking filesmsbuild.exe 保持打开状态,锁定文件
【发布时间】:2011-04-24 14:37:37
【问题描述】:

我使用 TeamCity,它反过来调用 msbuild (.NET 4)。我有一个奇怪的问题,在构建完成后(它是否成功构建似乎并不重要),msbuild.exe 保持打开状态,并锁定其中一个文件,这意味着每次 TeamCity 尝试清除其工作目录,失败,无法继续。

这种情况几乎每次都会发生。

我真的迷路了,所以我会尽量提供尽可能多的细节。

  • 服务器是 Intel Core i7、2 GB 内存、Windows Server 2008 标准 64 位 SP2。
  • 在 TeamCity 中,msbuild runner 配置了/m 命令行参数(这意味着使用多个核心)
  • 有问题的文件总是在路径 External Tools\Telerik\Telerik.Reporting.Dll 中的一个 .NET 项目中引用的相同外部 DLL。 (External Tools 目录中包含的其他几个 .DLL 文件采用类似的路径结构,不​​会导致此问题)。目前,这是 Telerik 报告的试用版,以防万一。
  • 当问题发生时,任务管理器中总是列出几个msbuild.exe *32 进程:我相信有 7 个。使用 Process Explorer,它们看起来都像顶级进程(没有父进程)。他们都使用 20-50MB 的内存和 0.0% 的 CPU。
  • 如果我等待 1-3 分钟,msbuild.exe 进程会自行退出,然后 TeamCity 可以正确更新工作目录。
  • 如果我手动终止 msbuild 进程,TeamCity 的更新将立即再次生效。
  • Windows 中的索引服务已关闭(尽管前两点几乎证实是 msbuild.exe 导致了问题)。
  • Telerik.reporting.dll 上没有特殊属性。唯一的 SVN 属性是 svn:mime-type = application/octet-stream

以前有人遇到过这个吗?

【问题讨论】:

    标签: msbuild teamcity


    【解决方案1】:

    msbuild/nr:false 一起使用。

    简而言之:MSBuild 尝试做很多事情来提高速度,尤其是并行构建。它将产生许多“节点”——可以编译项目的单个 msbuild.exe 进程,并且由于进程需要一点时间来启动,在构建完成后,这些进程会挂起(默认情况下,我认为 15 分钟) ),因此如果您碰巧很快再次构建,这些节点可以“重用”并节省流程设置成本。但是您可以通过使用上述命令行选项关闭 nodeReuse 来禁用该行为。

    另见:

    【讨论】:

    • 有道理:如果我删除 /m,它似乎不会发生。我现在正在尝试使用/m /nr:false,我将运行几个版本,看看效果如何。谢谢
    • 已经几天了,后来构建了几十个,但它没有再次发生 - 看起来它已经解决了。谢谢
    • 如何让 Visual Studio 使用该 msbuild 选项构建项目?
    • 我仍然想知道,但实际上我遇到了 C++/CLI 项目的 Visual Studio 11 Beta 错误。是否会导致相同的症状:connect.microsoft.com/VisualStudio/feedback/details/728912/…
    • @CameronTaggart 您可以使用项目/解决方案文件夹中托管的特殊文件添加 msbuild 命令行选项。见docs.microsoft.com/en-us/visualstudio/msbuild/…
    【解决方案2】:

    要在 Visual Studio 中禁用节点重用,您必须使用环境变量:

    MSBUILDDISABLENODEREUSE=1
    

    【讨论】:

    • 我有效地使用了这个,但是现在有另一个工具失败了,当使用 VS11 Beta 编译 C++ 时,即 mt.exe,还有其他变量可以使用吗?
    • 不能用VS中某处的对话框设置吗?
    • @dan 衷心感谢您找到这个,我祈祷还有一个环境变量可以禁用 Microsoft.VisualStudio.Web.Host.exe。
    • 这也适用于从命令行运行构建,例如批处理脚本、构建服务器等。
    猜你喜欢
    • 2012-12-09
    • 2013-01-24
    • 1970-01-01
    • 2013-11-26
    • 1970-01-01
    • 2018-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多