错误MSB6006:用代码31退出“mt.exe”

我今天遇到了这个问题,同时将VS2008解决scheme迁移到VS2010。 在以下任何一种情况下出现问题:

  1. 重build解决scheme
  2. 清理,然后生成解决scheme

如果我在其中任何一个之后做了第二次构build,问题没有出现。 使用Google,我真正想到的只有微软的博客,他们说这些博客无法重现问题,或者在未来的版本中修复。

我发现最好的东西是在这里: Mikazo技术博客:解决在Visual Studio 2010中的MT.exe错误

在上面的文章中,它说这个问题与清单生成有关,解决办法是在链接器 – >清单下的设置中closures清单 。 我不需要这个项目的清单,但我仍然不满意。

我已经解决了这个问题,而且只是回答我自己的问题,因为我没有在StackOverflow中发现这个特定的错误(代码31)。

使用进程监视器和dbgview我发现msmpeng(Microsoft Security Essentials)正在访问该文件,只是当mt.exe想独占它。 不包括开发目录解决了这个问题。 这当然是一个解决方法。

警告 :这个确切的错误也可能发生在Windows资源pipe理器窗口打开包含您正在尝试构build* .exe的文件夹的结果。

例如:Explorer在/.../MyProj/Debug/打开,同时尝试在Visual Studio中构build代码的Debug版本。

意识到这一点之前,我对自己生气了〜10分钟。

在我的项目中,Intermediate和Output目录被设置为:

  • 中级目录:$(configuration)\
  • 输出目录:$(SolutionDir)bin \ $(Configuration)\

C / C ++ – >输出文件 ,我有以下几点:

  • ASM列表位置:$(IntDir)\
  • 对象文件名称:$(IntDir)\
  • 程序数据库文件名:$(OutDir)\ $(TargetName).pdb

链接器 – >清单文件下 ,我有:

  • 清单文件:$(IntDir)$(TargetName)$(TargetExt).intermediate.manifest

治愈的办法是从我的C / C ++ – > Output Files部分删除尾部(因为它已经是这些variables的一部分):

  • ASM列表位置:$(IntDir)
  • 对象文件名称:$(IntDir)
  • 程序数据库文件名:$(OutDir)$(TargetName).pdb

通常情况下,使用$(IntDir)$(OutDir)结尾的$(OutDir)似乎不会造成麻烦,即使这是不好的做法。 现在我不记得是不是意外做了这个转换过程,但是无论出于什么原因,似乎都搞乱了MT.exe

我希望这对遇到这个问题的其他人有用。 您的设置可能会有所不同,但请考虑它可能与不正确形成的文件名有关。

尝试closuresWindows Defender(或可能与其他防病毒相关的软件)。 已知Windows Defenderlocking文件,因为MT.EXE在链接器完成后运行。 WD在中间跳转,检查新build的EXE并lockingMT.EXE。

删除“debugging”文件夹中的“程序debugging数据库”为我工作。

我在高优先级的debug文件夹中运行.exe时发生了这个问题。

以pipe理员身份运行VS。 它解决了我的问题。

我有一个项目(* .sln)写在Visual Studio C 8.0。 它最近被迁移到了VC10。 当我select“发布模式”时,编译成功。 但是,如果我select“debugging模式”,则发生错误“MSB6006 mt.exe代码31”。

我发现,在debugging模式下,它使用了一个错误的子项目来启动。 修好启动子项目后,目前进展顺利。

—-新状态—这不会解决问题。 它只是通过重build来暂时消除这个问题。 此外,还有其他的错误造成的迁移。 新项目中缺less“resources.h”,“winres.rc”缩短。

在我的情况下,这是一个与TortoiseGit的问题。 从GIT存储库中删除debugging和发布文件夹解决了这个问题。

授予https://social.msdn.microsoft.com/Forums/windowsdesktop/en-US/c5a3e2c3-fbf4-4268-a551-8cee195be586/test-case-13-for-vista-certification?forum=windowscompatibility ,我发现这是通过修复后构build命令行中的“ – ”字符解决的。 我相信一些不好的复制/粘贴工作已经用连字符代替了连字符。

请检查您是否有AVG等防病毒软件。 排除反病毒软件排除列表中的清单文件。

寻找MSB8012警告。 对于C ++输出值和链接器输出值,可能有不同的输出规范。