Fehler 'LINK: Schwerwiegender Fehler LNK1123: Fehler bei der Konvertierung in COFF: Datei ungültig oder beschädigt' nach der Installation von Visual Studio 2012 Release Preview

535

Ich habe Visual Studio 2012 Release Preview installiert und es scheint in Ordnung zu sein. Wenn ich jetzt versuche, Visual Studio 2010 zum Kompilieren von C ++ - Projekten zu verwenden, wird die folgende Fehlermeldung angezeigt:

LINK: Schwerwiegender Fehler LNK1123: Fehler bei der Konvertierung in COFF: Datei ungültig oder beschädigt

Ich bin mir nicht 100% sicher, aber es scheint mit Projekten zu tun zu haben, die .rc(Ressourcen-) Dateien enthalten.

Ich habe versucht, Visual Studio 2010 über das Hinzufügen / Entfernen von Programmen und den Neustart zu reparieren, dies hat jedoch keine Auswirkungen.

Der gleiche Fehler wird auch angezeigt, wenn ich Visual Studio 2012 RC zum Kompilieren der C ++ - Projekte verwende, wenn die Verwendung des Visual Studio 2010-Toolset festgelegt ist. Ein Upgrade auf das Visual Studio 2011-Toolset behebt das Problem (aber ich möchte dies natürlich nicht für Produktionscode tun).

Update: Ich habe Visual Studio 2012 deinstalliert , neu gestartet und das Problem besteht weiterhin! Hilfe!

Orion Edwards
quelle
Ist dies ein x86-Problem, ein x64-Problem oder beides? Ich sehe es auf einem 32-Bit-Betriebssystem. Ich kann mich nicht erinnern, es auf einem 64-Bit-Betriebssystem gesehen zu haben.
JWW

Antworten:

652

In diesem MSDN-Thread wird erläutert, wie Sie das Problem beheben können.

Zusammenfassen:

  • Deaktivieren Sie entweder die inkrementelle Verknüpfung, indem Sie zu gehen

    Project Properties 
       -> Configuration Properties 
           -> Linker (General) 
              -> Enable Incremental Linking -> "No (/INCREMENTAL:NO)"
    
  • oder installieren Sie VS2010 SP1.

Änderungen (@CraigRinger): Beachten Sie, dass durch die Installation von VS 2010 SP1 die 64-Bit-Compiler entfernt werden . Sie müssen das VS 2010 SP1-Compilerpaket installieren , um sie zurückzubekommen.

Dies betrifft Microsoft Windows SDK 7.1 für Windows 7 und .NET 4.0 sowie Visual Studio 2010 .

Kurz
quelle
1
Ich bin kurz nach der Installation von .Net 4.5 auf dieses Problem gestoßen. Durch die Installation von VS2010 SP 1 wurde das Problem behoben. Ich habe VS 2012 zu keinem Zeitpunkt installiert.
KJAWolf
2
So deaktivieren Sie die inkrementelle Verknüpfung mit CMakefile: cmake.org/pipermail/cmake/2010-February/035174.html
Map X
2
In Qt unter Visual Studio zu Ihrem .pro hinzufügen: QMAKE_LFLAGS + = / INCREMENTAL: NO Arbeitete für mich
gollumullog
5
@grundic Art von. Wir haben cvtres.exe von Win 7 sdk umbenannt, damit link.exe es nicht findet und stattdessen die neue von .NET 4.5 verwendet. Das Windows 8 SDK enthält keine Befehlszeilentools mehr. Sie müssen jetzt mindestens Visual Studio 2012 Express für Desktops installieren, um die Befehlszeilentools der Desktop-App zu erhalten. Die Umbenennungslösung wurde als am wenigsten störend eingestuft und kann problemlos per Skript erstellt werden.
DuckPuppy
2
@DuckPuppy Zum Glück haben wir dieses Problem gelöst, indem wir Microsoft .Net 4.5.1 vollständig von unseren Build-Agenten entfernt und .Net 4.0 neu installiert haben. Danach haben wir Microsoft SDK 7.0 mit allen markierten Optionen neu installiert - dies hat unsere Probleme gelöst. Nach diesem Vorfall haben wir auch automatische Updates deaktiviert - nur für den Fall.
Grundic
249

Wenn das Deaktivieren der inkrementellen Verknüpfung für Sie nicht funktioniert und das Deaktivieren von "Manifest einbetten" auch nicht funktioniert, durchsuchen Sie Ihren Pfad nach mehreren Versionen von CVTRES.exe.

Beim Debuggen mit der Linker-Option / VERBOSE stellte ich fest, dass der Linker diese Fehlermeldung schrieb, als er versuchte, cvtres aufzurufen, und dies fehlschlug.

Es stellte sich heraus, dass ich zwei Versionen dieses Dienstprogramms auf meinem Weg hatte. Eins um C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\BIN\cvtres.exeund eins um C:\Windows\Microsoft.NET\Framework\v4.0.30319\cvtres.exe. Nach der Installation von VS2012 funktioniert die VS2010-Version von cvtres.exe nicht mehr. Wenn dies der erste in Ihrem Pfad ist und der Linker entscheidet, dass eine .res-Datei in das COFF-Objektformat konvertiert werden muss, schlägt die Verknüpfung mit LNK1123 fehl.

(Wirklich ärgerlich, dass die Fehlermeldung nichts mit dem eigentlichen Problem zu tun hat, aber das ist für ein Microsoft-Produkt nicht ungewöhnlich.)

Löschen / benennen Sie einfach die ältere Version des Dienstprogramms um oder ordnen Sie Ihre PATH-Variable neu an, sodass die funktionierende Version an erster Stelle steht.

Beachten Sie, dass Sie für x64-Toolbuilds möglicherweise auch überprüfen müssen, C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64wo sich ein anderes befindet cvtres.exe.

Stirb in Sente
quelle
3
Hat für mich gearbeitet. Vielen Dank, dass Sie den Tipp zu / VERBOSE aufgenommen haben, der zeigt, wie / warum und nicht nur was für eine magische Sache.
M Katz
1
Kopieren Sie einfach die neuere Datei im Framework-Verzeichnis über die alte im Visual Studio-Verzeichnis.
Yochai Timmer
Dies löste auch mein Problem. Ich arbeite auf einem Computer mit strenger Benutzerkontensteuerung, sodass ich über die Befehlszeile bestätigen konnte, welche Datei cvtres.exe zuerst funktioniert hat. Zuerst lief wo cvtres.exe. Dann "C: \ windows \ Microsoft.NET \ Framework \ v4.0.30319.cvtres.exe / machine: amd64 / verbose / out:" Name aus ausführlicher Ausgabe "/ readonly FileFromVerboutput.res. Ein Pfad zeigte einen Fehler, das .NET man arbeitete.
user176692
50

Überprüfen Sie die Version von cvtrs.exe:

dir "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\cvtres.exe"

Falsche Version
date:: 18.03.2010
time: 13:16 Uhr
size: 31.048 Byte
name: cvtres.exe

Richtige Version
date:: 21.02.2011
time: 18:03 Uhr
size: 31.056 Byte
name: cvtres.exe

Wenn Sie eine falsche Version haben, sollten Sie die richtige Version kopieren von:

C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin\cvtres.exe

und ersetzen Sie die hier:

C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\cvtres.exe

dh

copy "C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin\cvtres.exe" "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\cvtres.exe"
Sid
quelle
Dies könnte einigen anderen Menschen mit ähnlichen Problemen helfen. Ich verwende ms build und musste diese Dateien kopieren: msobj110.dll mspdb110.dll mspdbcore.dll mspdbsrv.exe Von C: \ Programme (x86) \ Microsoft Visual Studio 11.0 \ Common7 \ IDE nach C: \ Programme ( x86) \ Microsoft Visual Studio 11.0 \ VC \ bin zusätzlich dazu gemäß i-am-bryan.com/webs/tutorials/…
Kell
Dies funktionierte für mich, aber meine "korrekte" cvtres.exe-Datei hatte eine andere Größe, ein anderes Datum usw. (allerdings immer noch aus VS 2012 bin)
aampere
Für mich gelöst durch Umbenennen von cvtres aus .... Studio 10.0 \ VC \ bin \ amd64 \, Verzeichnis. Ich denke, weil ich Intel benutze, nicht AMD
Daniel Hári
46

Gemäß diesem Thread in MSDN-Foren: VS2012 RC-Installation bricht VS2010 C ++ - Projekte einfach cvtres.exevon VS2010 SP1 ab

C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\cvtres.exe

oder ab VS2012

C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin\cvtres.exe

und kopieren Sie es über die cvtres.exein VS2010 RTM- Installation (die ohne SP1 )

C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\cvtres.exe

Auf diese Weise verwenden Sie effektiv die korrigierte Version cvtres.exe11.0.51106.1.

Wiederholen Sie die gleichen Schritte für die 64-Bit-Version des Tools in C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64\cvtres.exe.

Diese Lösung ist eine Alternative zur Installation von SP1 für VS2010. In einigen Fällen können Sie SP1 einfach nicht installieren (dh, wenn Sie Builds vor SP1 unterstützen müssen).

Mloskot
quelle
1
Das hat bei mir funktioniert. Da ich auf Win7 64-Bit bin, habe ich zuerst cvtres.exe aus dem Ordner ... Framework64 \ v4.3 ... kopiert, aber das hat das Problem nicht gelöst. Dann kopierte es aus dem Ordner Framework \ v4.3 ... und das löste das Problem. DANKE !!!!!
FalconK
36

Wenn Sie Visual Studio 2012 RC installiert haben, wurde .NET 4.5 RC installiert.

Deinstallieren Sie .NET 4.5 RC und installieren Sie die benötigte Version (4.0 für VS 2010). Dies sollte alle Probleme beseitigen, die Sie haben.

Dies löste das gleiche Problem. Visual Studio muss nicht deinstalliert werden.

B_Dubb42
quelle
4
Großartig!! Ich habe nur .NET 4.5 durch .NET 4.0 ersetzt. und es funktioniert gut !!
Manutd
1
Update: Die Deinstallation von .net 4.5 und 4.0 behebt das Problem für mich (VS 2010 Express). Windows Update scheint jedoch ständig auf .net 4.5.1 zu aktualisieren, sodass ich dies immer wieder wiederholen muss. Bei der Installation von "VS 2010 SP1" und voila funktioniert VS 2010 Express jetzt auch, wobei .Net 4.5.1 noch installiert ist.
Rogerdpack
15

Dies liegt daran, dass .NET Framework 4.5 .NET Framework 4.0 ersetzt. Ich habe Visual Studio 2010 mehrmals ohne Glück deinstalliert. Als ich .NET Framework 4.5 entfernte und Visual Studio 2010 neu installierte, ging es gut.

Siehe Visual Studio 11 vollständig deinstallieren, um eine Neuinstallation durchzuführen .

AlonSamuel
quelle
3
Bestätige es !!!!!!! Nur eine Neuinstallation von VC2010 hilft nicht. Nach dem Löschen von Framework4.5 RC ist es OK.
Inkooboo
Ich habe umdh installiert, das .net 4.5 installiert, das Visual Studio 2010 kaputt gemacht hat. Nach der Deinstallation von .net 4.5 und der Neuinstallation von .net 4.0 wurde mein Visual Studio wieder lebendig.
stu
14

Für mich wurde das Problem behoben, indem 'Manifest generieren' auf 'Nein' gesetzt wurde. (Auch behoben mit / INCREMENTAL: NO)

FractalSpace
quelle
14

Wenn Sie x64 verwenden, hilft hier eine Ressource :

Dies liegt daran, dass Microsoft .NET 4.5 nicht mit Visual C ++ 10 kompatibel ist. Die Problemumgehung besteht darin, sicherzustellen, dass Sie die .NET-Version von cvtres.exe anstelle der Visual C ++ - Version ausführen. Dazu habe ich die Visual C ++ - Versionen dieser Dateien umbenannt und die .NET-Versionen an ihre Stelle kopiert.

1. C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\cvtres.exe
2. C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64\cvtres.exe

1. C:\windows\Microsoft.NET\Framework\v4.0.30319\cvtres.exe
2. C:\windows\Microsoft.NET\Framework64\v4.0.30319\cvtres.exe
Richard Peck
quelle
1
Hinweis: Dies funktioniert, da beide .NET Framework 4 Multi-targeting pack und .NET Framework 4.5.2 installiert sind. Die Datei C:\windows\Microsoft.NET\Framework\v4.0.30319\cvtres.exegehört zu .NET Framework 4 Multi-targeting pack. Dies ist im Allgemeinen der Fall, wenn Sie Windows SDK 7.1 installiert und später .NET auf 4.5.2 aktualisiert haben. In diesem Fall können Sie in der Regel umbenennen einfach C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\cvtres.exeauf cvtres-old.exeund die neuere cvtres.exe(datiert 8/30/17) verwendet und funktionieren wird.
David C. Rankin
13

Ich habe dieses Problem schließlich gelöst, indem ich VS2012 RC vollständig deinstalliert habe, gefolgt von einer vollständigen Deinstallation von VS2010 und einer Neuinstallation von VS2010.

Es hat ewig gedauert, aber jetzt kann ich C ++ - Projekte in VS2010 wieder kompilieren.

Orion Edwards
quelle
11

Das Problem wurde für mich auf magische Weise gelöst, indem .NET 4.5 entfernt und durch .NET 4.0 ersetzt wurde . Ich musste dann Visual Studio 2010 reparieren - es wurde auf dem Weg irgendwie beschädigt.

Ich hatte zuvor Visual Studio 2012 installiert und dann deinstalliert - was möglicherweise mit dem Problem zusammenhängt.

Raupe
quelle
2
Das hat bei mir funktioniert. Ich habe das Net 4.5 als wichtiges Windows Update erhalten. Ich habe es gerade deinstalliert, wodurch der Build auf neue Weise fehlschlug. Dann habe ich die Visual Studio 2010 Express- Installation vollständig repariert , wodurch das Problem behoben wurde.
Hyde
10

Ich habe Visual Studio 2012 nicht installiert, aber in Visual Studio 2010 ist dieser Fehler weiterhin aufgetreten. Dieser Fehler wurde nach der Installation von Visual Studio 2010 SP1 behoben.

Saji
quelle
9

Ich hatte das gleiche Problem mit Microsoft Visual Studio 2010 Ultimate und es wurde mit der in diesem Youtube-Video beschriebenen Methode gelöst

Das Video schlägt vor, die Datei cvtres.exe in C: \ Programme (x86) \ Microsoft Visual Studio 10.0 \ VC \ bin (in my Win7X64 matchine) in cvtres-old.exe umzubenennen

Sepideh Abadpour
quelle
6

+1 an Benutzer Kurz für eine Antwort , die für mich funktioniert hat!

Ich habe versucht, dies zu debuggen msbuild /v:diag, und ich sehe, dass MSBuild versucht, ein Manifest mit <somename> .dll.embed.manifest.res in der Linker-Befehlszeile in die ausführbare Datei einzubetten, wobei dies eine Ressource ist Datei erstellt aus <Somename> .dll.embed.manifest. Die Manifestdatei ist jedoch eine leere Unicode-Textdatei. (Das heißt, eine Zwei-Byte-Datei mit dem Unicode-Präfix 0xFEFF)

Das Grundproblem scheint also damit zu tun zu haben, dass diese Manifestdatei nicht generiert wird oder verwendet wird, wenn <somename> .dll.intermediate.manifest hätte verwendet werden sollen.

Eine alternative Lösung scheint darin zu bestehen, die Option "Manifest einbetten" unter Eigenschaften, Manifest-Tool, Eingabe und Ausgabe zu deaktivieren.

Stirb in Sente
quelle
6

Nach dem Aktivieren der inkrementellen Verknüpfung -> "Nein (/ INCREMENTAL: NO)" hat es bei mir nicht funktioniert, aber nach dem Löschen der RC-Datei funktioniert es bei mir.

robin.lo
quelle
5

Zusammenfassen:

Step1

Project Properties 
   -> Configuration Properties 
       -> Linker (General) 
          -> Enable Incremental Linking -> "No (/INCREMENTAL:NO)"

Wenn Schritt 1 nicht funktioniert, führen Sie Schritt 2 aus

Project Properties 
   -> Configuration Properties 
       -> Manifest Tool (Input and Output) 
          -> Enable Incremental Linking -> "No"

Wenn Schritt 2 nicht funktioniert, führen Sie Schritt 3 aus. Kopieren Sie eine der folgenden Dateien:

  1. C: \ Programme (x86) \ Microsoft Visual Studio 11.0 \ VC \ bin \ cvtres.exe
  2. C: \ Programme (x86) \ Microsoft Visual Studio 12.0 \ VC \ bin \ cvtres.exe
  3. C: \ Programme (x86) \ Microsoft Visual Studio 13.0 \ VC \ bin \ cvtres.exe

    Ersetzen Sie dann in C: \ Programme (x86) \ Microsoft Visual Studio 10.0 \ VC \ bin \ cvtres.exe. Führen Sie mit mir drei Schritte aus, damit es funktioniert

Hung Pham
quelle
4

Seit Januar 2014 habe ich aus bestimmten Gründen .NET Framework 4.5.1 installiert. Ich weiß nicht, ob dies auf eine Softwareinstallation von Drittanbietern oder auf ein automatisches Update zurückzuführen ist.

Am 29. Januar wurde eine Komponente installiert und ich erhielt die

LINK : fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt 

Botschaft. Zu dieser Zeit löste ich durch Inkrementieren der inkrementellen Verknüpfung.

Am 31. Januar wurde eine weitere Komponente von .NET Framework 4.5.1 installiert, und der Trick mit inkrementellen Links funktionierte nicht mehr. Ich habe dann Visual Studio 2010 SP1 installiert, aber danach wurde das Problem:

Error   6   error LNK1104: cannot open file 'msvcrtd.lib'. 

Ich denke, der SP1 hat meine Visual Studio 2010-Installation durcheinander gebracht.

Also habe ich .NET Framework 4.5.1 deinstalliert, .NET Framework 4.0 installiert und Visual Studio 2010 deinstalliert und anschließend neu installiert. Das hat bei mir funktioniert.

JackOLantern
quelle
3

Trotz der Installation von Service Pack wird der Fehler angezeigt. Versuchen Sie dann, die Datei cvtres.exe im Ordner C: \ Programme (x86) \ Microsoft Visual Studio 10.0 \ VC \ bin zu entfernen / umzubenennen. Das hat bei mir funktioniert.

Nerd
quelle
Es hat bei mir funktioniert. Aber ich habe nicht verstanden, wie das ein Problem war. Es wäre dankbar, wenn Sie mir sagen können. Vielen Dank.
DTdev
2
In der folgenden Antwort hat @Rich Peck den Grund für dieses Verhalten erläutert.
Nerd
1

Ich setze Inkrementelle Verknüpfung aktivieren auf "Nein (/ INCREMENTAL: NO)" und es funktioniert bei mir nicht .

Als nächstes habe ich geändert:

Project Properties 
   -> Configuration Properties 
       -> General
          -> Platform Toolset -> "Visual Studio 2012 (v110)"

und es funktioniert bei mir :)

sma6871
quelle
Dies funktioniert nicht, wenn Sie eine ausführbare Datei erstellen müssen , die auf einer WinXP-Plattform debuggbar ist.
Jay Elston
Entschuldigung, aber dies ist keine Lösung. Sie ändern das Toolset, das ein völlig anderer Compiler ist
Semih Ozmen
1

Die Neuinstallation von CMake hat bei mir funktioniert. Die neue Kopie von CMake hat herausgefunden, dass Visual Studio 11 anstelle von 10 verwendet werden sollte.

naroom
quelle
1

Ich habe das Windows SDK für die Win32-Kernprogrammierung verwendet und .NET 4.5 aus "unbekannten" Gründen installiert. Ich habe das deinstalliert und 4.0 wie die vorherigen Antworten installiert und ja, es hat auch bei mir funktioniert.

Ich bin nur verblüfft, dass ich das nutzlose .NET-Framework zum Erstellen von Win32-Apps mit dem SDK verwenden musste.

Vijay Kumar Kanta
quelle
1

Ich habe dies folgendermaßen gelöst:

  1. Geben Sie an einer Eingabeaufforderung msconfig ein und drücken Sie die Eingabetaste.
  2. Klicken Sie auf die Registerkarte Dienste.
  3. Suchen Sie nach "Application Experience" und setzen Sie ein Häkchen (wählen Sie dies zum Aktivieren aus).
  4. OK klicken. Und ggf. neu starten.

Somit wird das Problem für immer bestehen bleiben. Erstellen Sie nach dem Zufallsprinzip und debuggen Sie Ihre C ++ - Projekte ohne Störung.

App Arbeit
quelle
Sie können den Applicaton Experienc-Dienst auch über services.msc
App Work am
2
Was bewirkt dies zur Lösung des Problems?
Mabraham
1

Für diejenigen unter Ihnen, die nach einer Lösung für dieses Problem mit den OpenGL SuperBible 6th-Quellcodebeispielen suchen, wird die Lösung in Release anstelle von Debug erstellt . Alle Projekte haben die inkrementelle Verknüpfungsoption in der Release- Version deaktiviert .

Gallo
quelle
1

Mein Problem war, dass ich auf meinem PC zwei Pfade hatte, die dieselben Bibliotheken enthielten. Beiden Wege wurden zu den Zusätzlichen Bibliotheksverzeichnissen in Konfigurationseigenschaften -> Linker -> Allgemein . Das Entfernen eines der Pfade löste das Problem.

mihai
quelle
1

Nach dem Update von .NET hatte ich das gleiche Problem: Ich habe zuerst das .NET Framework deinstalliert, Visual Studio von visualstudio.com heruntergeladen und "Reparieren" ausgewählt.

NET Framework wurden automatisch mit Visual Studio installiert -> und jetzt funktioniert es einwandfrei!

Aleksandr Khomenko
quelle
1

Ich habe es ein paar Mal versucht und schließlich das Problem durch mehrmaliges Deinstallieren des VS2010 gelöst. Ich glaube, ich hatte nicht alle Dateien deinstalliert und deshalb hat es nicht zum ersten Mal funktioniert.

Bei der Installation von VS2012 wird gesagt, dass Sie mit VS2010 SP1 nicht in beiden Programmen an demselben Projekt arbeiten können. Es wird empfohlen, nur ein Programm zu haben.

Vielen Dank!

Vengage
quelle
1

Ich hatte dieses Problem, nachdem ich Visual Studio 2017 und .NET Framework 4.6 auf dem Computer installiert hatte, auf dem zuvor Visual Studio 2010 installiert war.

Das Problem war, dass nach einer solchen Installation die Datei msvcr100_clr0400.dll von C: \ Windows \ System32 mit der neuen mit einer sehr kleinen Größe von ~ 19 KB überschrieben wurde, die frühere jedoch ~ 800 KB.

Nachdem ich die Datei manuell von einem anderen Build-Computer wiederhergestellt hatte, funktionierte cvtres.exe wieder ordnungsgemäß.

Alexander Samoylov
quelle