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!
quelle
Antworten:
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
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 .
quelle
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.exe
und eins umC:\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\amd64
wo sich ein anderes befindetcvtres.exe
.quelle
Überprüfen Sie die Version von
cvtrs.exe
:Falsche Version
date
:: 18.03.2010time
: 13:16 Uhrsize
: 31.048 Bytename
: cvtres.exeRichtige Version
date
:: 21.02.2011time
: 18:03 Uhrsize
: 31.056 Bytename
: cvtres.exeWenn Sie eine falsche Version haben, sollten Sie die richtige Version kopieren von:
und ersetzen Sie die hier:
dh
quelle
Gemäß diesem Thread in MSDN-Foren: VS2012 RC-Installation bricht VS2010 C ++ - Projekte einfach
cvtres.exe
von VS2010 SP1 aboder ab VS2012
und kopieren Sie es über die
cvtres.exe
in VS2010 RTM- Installation (die ohne SP1 )Auf diese Weise verwenden Sie effektiv die korrigierte Version
cvtres.exe
11.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).
quelle
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.
quelle
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 .
quelle
Für mich wurde das Problem behoben, indem 'Manifest generieren' auf 'Nein' gesetzt wurde. (Auch behoben mit / INCREMENTAL: NO)
quelle
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.
quelle
.NET Framework 4 Multi-targeting pack
und.NET Framework 4.5.2
installiert sind. Die DateiC:\windows\Microsoft.NET\Framework\v4.0.30319\cvtres.exe
gehö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 einfachC:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\cvtres.exe
aufcvtres-old.exe
und die neuerecvtres.exe
(datiert 8/30/17) verwendet und funktionieren wird.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.
quelle
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.
quelle
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.
quelle
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 umzubenennenquelle
+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.
quelle
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.
quelle
Zusammenfassen:
Wenn Schritt 1 nicht funktioniert, führen Sie Schritt 2 aus
Wenn Schritt 2 nicht funktioniert, führen Sie Schritt 3 aus. Kopieren Sie eine der folgenden Dateien:
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
quelle
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
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:
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.
quelle
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.
quelle
Ich setze Inkrementelle Verknüpfung aktivieren auf "Nein (/ INCREMENTAL: NO)" und es funktioniert bei mir nicht .
Als nächstes habe ich geändert:
und es funktioniert bei mir :)
quelle
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.
quelle
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.
quelle
Ich habe dies folgendermaßen gelöst:
Somit wird das Problem für immer bestehen bleiben. Erstellen Sie nach dem Zufallsprinzip und debuggen Sie Ihre C ++ - Projekte ohne Störung.
quelle
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 .
quelle
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.
quelle
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!
quelle
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!
quelle
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äß.
quelle