37

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

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

如果我在其中任何一个之后进行了第二次构建,问题就不会出现。使用谷歌,我真正想到的只是微软多年前的博客说他们无法重现这个问题,或者它在未来的版本中得到修复。

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

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

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

4

11 回答 11

38

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

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

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

于 2015-02-01T02:48:55.630 回答
36

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

于 2013-05-29T12:46:17.603 回答
5

在我的项目中,中间和输出目录设置为:

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

C/C++-->Output Files下,我有以下内容:

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

Linker-->Manifest File下,我有:

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

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

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

通常,使用$(IntDir)$(OutDir)尾随的双重\作用似乎不会造成麻烦,即使这是不好的做法。我现在不记得是我偶然做的还是转换过程做的,但无论出于何种原因,它似乎一直在搞砸MT.exe

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

于 2013-05-21T22:43:29.403 回答
3

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

于 2013-10-17T17:45:32.737 回答
2

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

于 2015-01-14T16:32:45.987 回答
1

删除“调试”文件夹中的“程序调试数据库”对我有用。

当我在调试文件夹中以高优先级运行 .exe 时发生了这个问题。

于 2013-10-28T23:23:39.540 回答
1

以管理员身份运行 VS。它为我解决了这个问题。

于 2014-06-14T05:58:34.723 回答
0

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

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

---- 新状态 --- 这不会解决问题。它只是通过全部重建使问题暂时消失。此外,还有其他由迁移引起的故障。新项目中缺少“resources.h”,并且“winres.rc”被缩短。

于 2013-08-31T05:26:34.293 回答
0

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

于 2014-09-03T11:15:56.073 回答
0

检查您是否有任何防病毒软件,例如 AVG。排除杀毒软件排除列表中的清单文件。

于 2017-03-08T12:40:23.960 回答
0

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

于 2017-05-16T21:42:45.490 回答