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

pad*_*ddy 34 visual-studio-2010

今天我在将VS2008解决方案迁移到VS2010时遇到了这个问题.在以下任一情况中发生此问题:

  1. 重建解决方案
  2. 清洁,然后是Build Solution

如果我在其中任何一个之后做了第二个Build,问题就没出现了.使用谷歌,我真正想到的只是来自微软的一年之久的博客说他们无法重现这个问题,或者在未来的版本中修复了它.

我找到的最好的东西是:Mikazo Tech Blog:解决Visual Studio 2010中的MT.exe错误

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

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

bun*_*ive 36

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

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

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

  • 它刚刚开放并坐在那里.奇怪,我知道.我关闭它后不久就没有问题了. (5认同)

小智 35

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


pad*_*ddy 6

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

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

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

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

Linker - > Manifest File下,我有:

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

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

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

通常情况下,使用$(IntDir)$(OutDir)使用尾随的加倍\似乎不会引起麻烦,即使这是不好的做法.我现在不记得我是偶然做到的还是转换过程是这样做的,但不管出于什么原因,它似乎搞乱了MT.exe.

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