it-swarm.com.de

Fehler MSB6006: "mt.exe" wurde mit Code 31 beendet

Dieses Problem ist mir heute bei der Migration einer VS2008-Lösung auf VS2010 begegnet. Das Problem trat in einem der folgenden Szenarien auf:

  1. Lösung neu erstellen
  2. Clean gefolgt von Build Solution

Wenn ich nach einem dieser beiden Schritte einen zweiten Build erstellt habe, wurde das Problem nicht angezeigt. Mit Google habe ich wirklich nur jahrelange Blogs von Microsoft gefunden, die sagten, dass sie das Problem nicht reproduzieren können oder dass es in einer zukünftigen Version behoben wird.

Das Beste, was ich gefunden habe, war hier: Mikazo Tech Blog: Beheben Sie MT.exe-Fehler in Visual Studio 2010

In dem obigen Artikel wurde gesagt, dass das Problem mit der Manifest-Generierung zusammenhängt und dass die Lösung darin besteht, Manifests in Einstellungen unter Linker -> Manifest zu deaktivieren. Ich brauche keine Manifests für dieses Projekt, aber ich war immer noch nicht zufrieden.

Ich habe das Problem gelöst und beantworte einfach meine eigene Frage, da ich diesen spezifischen Fehler (Code 31) in StackOverflow nicht gefunden habe.

34
paddy

Mit Prozessmonitor und dbgview entdeckte ich, dass msmpeng (Microsoft Security Essentials) auf die Datei zugegriffen hat, als mt.exe es ausschließlich wollte. Das Ausschließen des Entwicklungsverzeichnisses löste das Problem . Es ist natürlich immer noch eine Problemumgehung.

35
user1839019

WARNING: Dieser genaue Fehler kann auch auftreten, wenn ein Windows Explorer-Fenster in dem Ordner geöffnet wird, der die * .exe-Datei enthält, die Sie gerade erstellen möchten. 

Beispiel: Explorer wird in /.../MyProj/Debug/ geöffnet, während versucht wird, die Debug-Version Ihres Codes in Visual Studio zu erstellen. 

Ich war wütend auf mich selbst, bevor ich das begriff.

33
bunkerdive

In meinen Projekten wurde für die Verzeichnisse Zwischen und Ausgabe Folgendes festgelegt:

  • Zwischenverzeichnis: $ (Configuration) \
  • Ausgabeverzeichnis: $ (SolutionDir) bin\$ (Configuration) \

Unter C/C++ -> Ausgabedateien hatte ich Folgendes:

  • Speicherort der ASM-Liste: $ (IntDir) \
  • Objektdateiname: $ (IntDir) \
  • Dateiname der Programmdatenbank: $ (OutDir)\$ (TargetName) .pdb

Unter Linker -> Manifest File hatte ich:

  • Manifestdatei: $ (IntDir) $ (TargetName) $ (TargetExt) .intermediate.manifest

Das Heilmittel bestand darin, den nachfolgenden \ aus meinem C/C++ -> Output Files Abschnitt zu entfernen (da er bereits Teil dieser Variablen ist):

  • Speicherort der ASM-Liste: $ (IntDir)
  • Name der Objektdatei: $ (IntDir)
  • Dateiname der Programmdatenbank: $ (OutDir) $ (TargetName) .pdb

Normalerweise scheint die Verdoppelung der Verwendung von $(IntDir) oder $(OutDir) mit einem nachlaufenden \ keine Probleme zu verursachen, obwohl dies eine schlechte Praxis ist. Ich kann mich jetzt nicht erinnern, ob ich es aus Versehen getan habe oder ob der Konvertierungsprozess es getan hat, aber aus irgendeinem Grund scheint es, dass MT.exe durcheinander geraten ist.

Ich hoffe, dass dies für alle anderen nützlich ist, die auf dieses Problem stoßen. Ihre Einstellungen können sich durchaus unterscheiden, bedenken Sie jedoch, dass es sich um falsch gebildete Dateinamen handeln kann.

5
paddy

Deaktivieren Sie Windows Defender (oder möglicherweise andere Antivirensoftware). Windows Defender sperrt bekannterweise Dateien, da MT.EXE ausgeführt wird, nachdem der Linker fertig ist. WD springt in die Mitte, prüft die neu erstellte EXE-Datei und sperrt sie für MT.EXE ein.

3
wpfwannabe

Anerkennung von https://social.msdn.Microsoft.com/Forums/windowsdesktop/en-US/c5a3e2c3-fbf4-4268-a551-8cee195be586/test-case-13-for-Vista-certification?forum=windowscompatibility , ich fand das Problem behoben, indem das '-' Zeichen in der Post-Build-Kommandozeile korrigiert wurde. Ich glaube, einige schlechte Kopier-/Einfügevorgänge haben einen Bindestrich durch einen Gedankenstrich ersetzt.

2
KJAWolf

das Löschen der "Programm-Debug-Datenbank" im "Debug" -Ordner funktionierte für mich. 

Dieses Problem trat auf, wenn ich die .exe im Debug-Ordner mit hoher Priorität ausführte. 

1
sam

Führen Sie VS als Administrator aus. Es hat das Problem für mich gelöst.

1
Deamonpog

Überprüfen Sie, ob Sie eine Antivirensoftware wie AVG haben. Schließen Sie die Manifestdateien in der Ausschlussliste der Antivirensoftware aus.

0
xiao

Suchen Sie nach MSB8012-Warnungen. Möglicherweise haben Sie eine andere Ausgabespezifikation für den C++ - Ausgabewert und den Linker-Ausgabewert.

0
Paul

In meinem Fall war es ein Problem mit TortoiseGit. Durch das Entfernen von Debug- und Release-Ordnern aus dem GIT-Repository wurde das Problem behoben.

0
Lukasz Stanek

Ich habe ein Projekt (* .sln) in Visual Studio c 8.0 geschrieben. Es wurde kürzlich auf VC10 migriert. Wenn ich den "Release-Modus" wähle, wurde er erfolgreich kompiliert. Wenn ich jedoch "Debug-Modus" wähle, ist der Fehler "MSB6006 mt.exe code 31" aufgetreten.

Ich habe festgestellt, dass im Debug-Modus ein falsches Unterprojekt zum Starten verwendet wurde . Nachdem das Start-Unterprojekt behoben wurde, funktioniert es soweit gut.

---- neuer Status ---.__ Das wird das Problem nicht beheben. Es verschwindet das Problem nur vorübergehend, indem alle wieder aufgebaut werden. Es gibt auch andere durch die Migration verursachte Fehler. Die "resources.h" wird aus dem neuen Projekt verfehlt und die "winres.rc" wird verkürzt.

0
jemin