Подтвердить что ты не робот

Ошибка MSB6006: "mt.exe" вышел с кодом 31

Я столкнулся с этой проблемой сегодня, перенося VS2008 решение VS2010. Проблема возникла в любом из следующих сценариев:

  • Реконструкция решения
  • Очистить, затем Build Solution

Если бы я сделал вторую сборку после любого из них, проблема не появилась. Используя Google, все, что я действительно придумал, - это годовые блоги от Microsoft, говорящие, что они не могут воспроизвести проблему или что она исправлена ​​в будущей версии.

Лучшее, что я нашел, было здесь: Блог разработчиков Mikazo Tech: устранение ошибок MT.exe в Visual Studio 2010

В приведенной выше статье говорилось, что проблема связана с генерацией Manifest и что решение состоит в отключении Manifests в настройках в Linker → Manifest. Мне не нужны Manifests для этого проекта, но я все еще не был удовлетворен.

Я решил это и просто буду отвечать на свой вопрос, потому что я не нашел эту конкретную ошибку (код 31) в StackOverflow.

4b9b3361

Ответ 1

Используя монитор процессов и dbgview, я обнаружил, что msmpeng (Microsoft Security Essentials) обращался к файлу, только когда mt.exe хотел получить его исключительно. Исключение каталога разработки решило проблему. Разумеется, это временное решение.

Ответ 2

ПРЕДУПРЕЖДЕНИЕ. Эта точная ошибка также может возникнуть в результате открытия окна проводника Windows в папке, содержащей *.exe, которую вы в настоящее время пытаетесь создать.

Например: Explorer открывается в /.../MyProj/Debug/ при попытке создать версию вашего кода Debug в Visual Studio.

Я злюсь на себя за ~ 10 минут, прежде чем осознать это.

Ответ 3

В моих проектах для промежуточных и выходных каталогов были установлены следующие значения:

  • Промежуточный адрес: $(Конфигурация)\
  • Output Dir: $(SolutionDir) bin\$(Конфигурация)\

В C/С++ → Выходные файлы у меня было следующее:

  • Расположение списка ASM: $(IntDir)\
  • Имя файла объекта: $(IntDir)\
  • Название файла базы данных программы: $(OutDir)\$(TargetName).pdb

В разделе Linker → Manifest File я имел:

  • Файл манифеста: $(IntDir) $(TargetName) $(TargetExt).intermediate.manifest

Исключение заключалось в том, чтобы удалить конечный \ из моего раздела C/С++ → Output Files (поскольку он уже является частью этих переменных):

  • Местоположение списка ASM: $(IntDir)
  • Имя файла объекта: $(IntDir)
  • Название файла базы данных программы: $(OutDir) $(TargetName).pdb

Обычно удвоение использования $(IntDir) или $(OutDir) с завершающим \, похоже, не вызывает проблем, хотя это и плохое. Я не могу вспомнить сейчас, сделал ли я это случайно или если процесс конверсии сделал это, но по какой-то причине он, кажется, испортил MT.exe.

Надеюсь, это полезно для всех, кто сталкивается с этой проблемой. Ваши настройки могут быть разными, но учтите, что это может быть связано с неправильно сформированными именами файлов.

Ответ 4

Попробуйте отключить Защитник Windows (или, возможно, другое антивирусное программное обеспечение). Защитник Windows, как известно, блокирует файлы, потому что MT.EXE запускается после завершения компоновщика. WD прыгает посередине, чтобы проверить новый EXE и заблокировать его для MT.EXE.

Ответ 5

удаление "базы данных отладки программ" в папке "debug" работало для меня.

Эта проблема возникла, когда я запускал .exe в папке отладки с высоким приоритетом.

Ответ 6

Запустите VS как администратор. Он решил проблему для меня.

Ответ 7

У меня есть проект (*.sln), написанный в visual studio c 8.0. Недавно он был перенесен на VC10. Когда я выбираю "Режим выпуска", он был скомпилирован успешно. Но если я выберу "Режим отладки", произошла ошибка "MSB6006 mt.exe code 31".

Я обнаружил, что в режиме отладки он использовал неправильный подпроект для запуска. После исправления подзаголовка запуска все идет хорошо.

---- новый статус --- Это не решит проблему. Это просто заставляет проблему временно исчезнуть путем перестройки - все. Кроме того, существуют другие ошибки, вызванные миграцией. "Resources.h" пропущен из нового проекта, а "winres.rc" сокращается.

Ответ 8

В моем случае это была проблема с TortoiseGit. Удаление папок Debug и Release из репозитория GIT решило проблему.

Ответ 9

Предоставляя кредит https://social.msdn.microsoft.com/Forums/windowsdesktop/en-US/c5a3e2c3-fbf4-4268-a551-8cee195be586/test-case-13-for-vista-certification?forum=windowscompatibility, я обнаружил, что это было устранено путем исправления символа '-' в командной строке post build. Я считаю, что некоторые плохие усилия копирования/вставки заменили дефис тире.

Ответ 10

Проверьте, есть ли у вас антивирусное программное обеспечение, такое как AVG. Исключить файлы манифеста в списке исключений антивирусного программного обеспечения.

Ответ 11

Найдите предупреждения MSB8012. Вероятно, у вас есть другая спецификация вывода для выходного значения С++ и значения Output Linker.