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

时间:2013-05-21 22:43:29

标签: visual-studio-2010

我在将VS2008解决方案迁移到VS2010时遇到了这个问题。在以下任一情况下都会出现此问题:

  1. 重建解决方案
  2. 清洁,然后是Build Solution
  3. 如果我在其中任何一个之后进行了第二次构建,则问题没有显示出来。使用谷歌,我真正想到的只是来自微软的一年之久的博客说他们无法重现这个问题,或者它在未来的版本中得到修复。

    我发现的最好的事情是:Mikazo Tech Blog: Solve MT.exe Errors in Visual Studio 2010

    在上面的文章中,它说该问题与Manifest生成有关,并且解决方案是在 Linker - > Manifest 下的设置中关闭Manifest。我不需要这个项目的清单,但我仍然不满意。

    我已经解决了这个问题,我只想回答我自己的问题,因为我没有在StackOverflow上找到这个特定错误(代码31)。

11 个答案:

答案 0 :(得分:35)

使用进程监视器和dbgview我发现msmpeng(Microsoft Security Essentials)正在访问该文件,就在mt.exe想要专门拥有它时。排除开发目录解决了问题。 当然,它仍然是一种解决方法。

答案 1 :(得分:33)

警告:由于在包含您当前正在尝试构建的* .exe的文件夹中打开Windows资源管理器窗口,也会发生此确切错误。

例如:在尝试在Visual Studio中构建代码的/.../MyProj/Debug/版本时,在Debug中打开资源管理器。

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

答案 2 :(得分:5)

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

  • 中级目录:$(配置)\
  • 输出目录:$(SolutionDir)bin \ $(配置)\

C / C ++ - >输出文件下,我有以下内容:

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

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

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

解决方法是从我的 C / C ++ - >输出文件部分删除尾随的\(因为它已经是这些变量的一部分):

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

通常情况下,使用$(IntDir)$(OutDir)并使用尾随\的双倍增长似乎不会造成麻烦,即使这是不好的做法。我现在不记得是不是偶然做到了,或者转换过程是否做到了,但无论出于何种原因,它似乎搞乱了 MT.exe

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

答案 3 :(得分:3)

尝试关闭Windows Defender(或可能是其他与防病毒相关的软件)。已知Windows Defender会锁定文件,因为MT.EXE在链接器完成后运行。 WD在中间跳转以检查新构建的EXE并将其锁定为MT.EXE。

答案 4 :(得分:2)

归功于https://social.msdn.microsoft.com/Forums/windowsdesktop/en-US/c5a3e2c3-fbf4-4268-a551-8cee195be586/test-case-13-for-vista-certification?forum=windowscompatibility,我发现通过在后期构建命令行中修复“ - ”字符可以解决这个问题。我相信一些糟糕的复制/粘贴工作已经用破折号替换了连字符。

答案 5 :(得分:1)

删除“debug”文件夹中的“program debug database”对我有用。

当我在高优先级的调试文件夹中运行.exe时发生此问题。

答案 6 :(得分:1)

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

答案 7 :(得分:0)

我有一个用visual studio c 8.0编写的项目(* .sln)。它最近被迁移到了VC10。当我选择“发布模式”时,它已成功编译。但如果我选择“调试模式”,则会出现错误“MSB6006 mt.exe code 31”。

我发现,在调试模式下,它使用了错误的子项目来启动。 修复启动子项目后,到目前为止一切正常。

----新状态--- 这不会解决问题。它只是通过重建所有来使问题在时间上消失。此外,迁移还会导致其他故障。新项目错过了“resources.h”,“winres.rc”缩短了。

答案 8 :(得分:0)

就我而言,TortoiseGit存在问题。从GIT存储库中删除Debug和Release文件夹解决了这个问题。

答案 9 :(得分:0)

检查您是否有任何像AVG这样的防病毒软件。排除防病毒软件排除列表中的清单文件。

答案 10 :(得分:0)

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