Zainstalowałem wersję Visual Studio 2012 Preview i wydaje się być w porządku, ale teraz, gdy próbuję użyć Visual Studio 2010 do kompilacji projektów C ++, pojawia się następujący komunikat o błędzie:
LINK: błąd krytyczny LNK1123: błąd podczas konwersji do COFF: plik jest nieprawidłowy lub uszkodzony
Nie jestem tego w 100% pewien, ale wydaje się, że jest to związane z projektami, w których znajdują się .rc
pliki (zasobów).
Próbowałem naprawić program Visual Studio 2010 z Dodaj / Usuń programy i zrestartować komputer, ale to nie działa.
Ten sam błąd pojawia się również, jeśli korzystam z programu Visual Studio 2012 RC do kompilacji projektów C ++, gdy jest ustawiony na używanie zestawu narzędzi Visual Studio 2010. Aktualizacja do zestawu narzędzi Visual Studio 2011 rozwiązuje problem (ale oczywiście nie chcę tego robić w przypadku kodu produkcyjnego).
Aktualizacja: odinstalowałem Visual Studio 2012 , uruchomiłem ponownie, a problem nadal występuje! Wsparcie!
źródło
Odpowiedzi:
Wątek MSDN wyjaśnia, jak to naprawić.
Podsumowując:
Wyłącz łączenie przyrostowe, przechodząc do
lub zainstaluj VS2010 SP1.
Edycje (@CraigRinger): Należy pamiętać, że instalacja VS 2010 SP1 usunie 64-bitowe kompilatory . Aby je odzyskać, musisz zainstalować pakiet kompilatora VS 2010 SP1 .
Dotyczy to Microsoft Windows SDK 7.1 dla Windows 7 i .NET 4.0, a także Visual Studio 2010 .
źródło
Jeśli wyłączenie przyrostowego łączenia nie działa, a wyłączenie „Embed Manifest” również nie działa, poszukaj ścieżki w wielu wersjach CVTRES.exe.
Po debugowaniu z opcją / VERBOSE linkera odkryłem, że linker zapisuje ten komunikat o błędzie, gdy próbował wywołać cvtres i nie powiodło się.
Okazało się, że miałem na swojej drodze dwie wersje tego narzędzia. Jeden o
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\BIN\cvtres.exe
jeden i jeden oC:\Windows\Microsoft.NET\Framework\v4.0.30319\cvtres.exe
. Po instalacji VS2012 wersja cvtres.exe VS2010 przestanie działać. Jeśli jest to pierwszy na twojej ścieżce, a linker zdecyduje, że musi przekonwertować plik .res do formatu obiektowego COFF, połączenie zakończy się niepowodzeniem z LNK1123.(Naprawdę denerwujące, że komunikat o błędzie nie ma nic wspólnego z rzeczywistym problemem, ale nie jest to niczym niezwykłym w przypadku produktu Microsoft).
Wystarczy usunąć / zmienić nazwę starszej wersji narzędzia lub ponownie ustawić zmienną PATH, aby działająca wersja była na pierwszym miejscu.
Należy pamiętać, że w przypadku kompilacji narzędzi x64 może być konieczne sprawdzenie,
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64
gdzie są innecvtres.exe
.źródło
Sprawdź wersję
cvtrs.exe
:Niepoprawna wersja::
date
03/18/2010time
: 01:16 PMsize
: 31 048 bajtówname
: cvtres.exePrawidłowa wersja::
date
02/21/2011time
: 06:03 PMsize
: 31.056 bajtówname
: cvtres.exeJeśli masz niewłaściwą wersję, skopiuj poprawną wersję z:
i zastąp ten tutaj:
to znaczy
źródło
Według tego wątku na forum MSDN: projekty VS2012 RC przerw instalacji VS2010 C ++ , po prostu wziąć
cvtres.exe
z VS2010 SP1lub z VS2012
i skopiuj go
cvtres.exe
w instalacji VS2010 RTM (tej bez SP1 )W ten sposób skutecznie wykorzystasz poprawioną wersję,
cvtres.exe
której jest 11.0.51106.1.Powtórz te same kroki dla 64-bitowej wersji narzędzia w
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64\cvtres.exe
.To rozwiązanie jest alternatywą dla instalacji dodatku SP1 dla VS2010 - w niektórych przypadkach po prostu nie można zainstalować dodatku SP1 (tj. Jeśli potrzebujesz obsługi kompilacji sprzed wersji SP1).
źródło
Jeśli zainstalowałeś Visual Studio 2012 RC, to zainstalował .NET 4.5 RC.
Odinstaluj .NET 4.5 RC i zainstaluj potrzebną wersję (4.0 dla VS 2010). To powinno wyjaśnić wszelkie twoje problemy.
To rozwiązało ten sam problem. Nie ma potrzeby odinstalowywania programu Visual Studio.
źródło
To dlatego, że .NET Framework 4.5 zastępuje .NET Framework 4.0. Odinstalowałem program Visual Studio 2010 kilka razy bez powodzenia. Po usunięciu .NET Framework 4.5 i ponownej instalacji programu Visual Studio 2010 poszło dobrze.
Zobacz Całkowicie odinstaluj Visual Studio 11, aby wykonać nową instalację .
źródło
Dla mnie ustawienie „Generuj manifest” na „Nie” naprawiło to. (Poprawiono także za pomocą / INCREMENTAL: NO)
źródło
Jeśli używasz x64, oto zasób pomoże :
Dzieje się tak, ponieważ Microsoft .NET 4.5 jest niezgodny z Visual C ++ 10. Obejściem tego problemu jest zapewnienie, że uruchomisz wersję cvtres.exe .NET zamiast wersji Visual C ++. Zrobiłem to, zmieniając nazwy tych plików w Visual C ++ i kopiując wersje .NET na ich miejsce.
źródło
.NET Framework 4 Multi-targeting pack
i.NET Framework 4.5.2
są zainstalowane. PlikC:\windows\Microsoft.NET\Framework\v4.0.30319\cvtres.exe
należy do.NET Framework 4 Multi-targeting pack
. Zasadniczo tak będzie w przypadku zainstalowania zestawu Windows SDK 7.1, a następnie aktualizacji .NET do wersji 4.5.2. W takim przypadku możesz po prostu zmienić nazwęC:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\cvtres.exe
na,cvtres-old.exe
a nowszacvtres.exe
wersja (z 30.08.17) zostanie użyta i będzie działać poprawnie.Ostatecznie rozwiązałem ten problem, wykonując pełną deinstalację VS2012 RC, a następnie pełną deinstalację VS2010, a następnie ponowną instalację od zera VS2010.
Zajęło to wieczność, ale teraz mogę ponownie skompilować projekty C ++ w VS2010.
źródło
Problem został dla mnie magicznie rozwiązany poprzez usunięcie .NET 4.5 i zastąpienie go .NET 4.0 . Następnie musiałem naprawić program Visual Studio 2010 - który po drodze został uszkodzony.
Wcześniej zainstalowałem, a następnie odinstalowałem program Visual Studio 2012 - który może być związany z problemem.
źródło
Nie zainstalowałem programu Visual Studio 2012, ale nadal pojawia się ten błąd w programie Visual Studio 2010. Rozwiązałem go po zainstalowaniu programu Visual Studio 2010 z dodatkiem SP1.
źródło
Miałem ten sam problem z Microsoft Visual Studio 2010 Ultimate i został rozwiązany metodą opisaną w tym filmie na youtube
Film sugeruje zmianę nazwy pliku cvtres.exe w C: \ Program Files (x86) \ Microsoft Visual Studio 10.0 \ VC \ bin
(in my Win7X64 matchine)
na cvtres-old.exeźródło
+1 do użytkownika Skrót od odpowiedzi, która zadziałała dla mnie!
Próbowałem zrobić z tym trochę debugowania
msbuild /v:diag
i widzę, że MSBuild próbuje osadzić manifest w pliku wykonywalnym, używając <somename> .dll.embed.manifest.res w wierszu poleceń linkera, gdzie jest to zasób plik zbudowany z <nazwa> .dll.embed.manifest. Ale plik manifestu jest pustym plikiem tekstowym Unicode. (To znaczy dwubajtowy plik z prefiksem 0xFEFF Unicode)Wydaje się, że problem root ma coś wspólnego z tym, że ten plik manifestu nie jest generowany lub jest używany, gdy należy użyć <somename> .dll.intermediate.manifest.
Alternatywnym rozwiązaniem wydaje się wyłączenie opcji „Manifest osadzania” w obszarze Właściwości, Narzędzie manifestu, Dane wejściowe i wyjściowe.
źródło
Nie działało to dla mnie po włączeniu łączenia przyrostowego -> „Nie (/ INCREMENTAL: NIE)”, ale działa dla mnie po usunięciu pliku rc.
źródło
Podsumowując:
jeśli krok 1 nie działa, wykonaj krok 2
jeśli krok 2 nie działa, wykonaj krok 3 Skopiuj plik z jednego z:
C: \ Program Files (x86) \ Microsoft Visual Studio 13.0 \ VC \ bin \ cvtres.exe
Następnie zamień na C: \ Program Files (x86) \ Microsoft Visual Studio 10.0 \ VC \ bin \ cvtres.exe Ze mną zrób 3 kroki, aby to działało
źródło
Od stycznia 2014 r. Z kilku powodów zainstalowałem .NET Framework 4.5.1, nie wiem czy z powodu instalacji oprogramowania innej firmy, czy też automatycznej aktualizacji.
29 stycznia zainstalowałem jeden komponent i zacząłem otrzymywać
wiadomość. W tym czasie rozwiązałem problem, unikając przyrostowego łącza.
31 stycznia zainstalowałem kolejny komponent .NET Framework 4.5.1 i sztuczka przyrostowego łącza już nie działała. Następnie zainstalowałem dodatek SP1 dla programu Visual Studio 2010, ale potem problem stał się:
Myślę, że dodatek SP1 zepsuł moją instalację programu Visual Studio 2010.
Więc odinstalowałem .NET Framework 4.5.1, zainstalowałem .NET Framework 4.0, a następnie odinstalowałem, a następnie ponownie zainstalowałem Visual Studio 2010. To zadziałało dla mnie.
źródło
Nawet pomimo zainstalowania dodatku Service Pack pojawia się błąd, a następnie spróbuj usunąć / zmienić nazwę pliku cvtres.exe w folderze C: \ Program Files (x86) \ Microsoft Visual Studio 10.0 \ VC \ bin. To zadziałało dla mnie.
źródło
Ustawiam Enable Incremental Linking na „No (/ INCREMENTAL: NO)” i to nie działa dla mnie .
Następnie zmieniłem:
i to działa dla mnie :)
źródło
Ponowna instalacja CMake działała dla mnie. Nowa kopia CMake zorientowała się, że powinien używać Visual Studio 11 zamiast 10.
źródło
Korzystałem z zestawu Windows SDK do podstawowego programowania Win32 i miałem .NET 4.5 zainstalowany z „nieznanych” powodów. Odinstalowałem to i zainstalowałem 4.0 jak poprzednie odpowiedzi i tak, to zadziałało również dla mnie.
Po prostu jestem oszołomiony, że musiałem używać bezużytecznej platformy .NET do budowania aplikacji Win32 za pomocą SDK.
źródło
Rozwiązałem to, wykonując następujące czynności:
Tak więc problem zniknie na zawsze. Twórz losowo i debuguj swoje projekty w C ++ bez żadnych zakłóceń.
źródło
Dla tych, którzy szukają rozwiązania tego problemu z przykładowymi kodami źródłowymi OpenGL SuperBible 6, rozwiązaniem jest budowanie w wersji zamiast debugowania . Wszystkie projekty wyłączyły opcję przyrostowego łączenia w wersji Release .
źródło
Mój problem polegał na tym, że na komputerze mam dwie ścieżki zawierające te same biblioteki. Obie ścieżki zostały dodane do dodatkowych katalogów bibliotecznych we Właściwościach konfiguracji -> Łącznik -> Ogólne . Usunięcie jednej ze ścieżek rozwiązało problem.
źródło
Miałem ten sam problem po aktualizacji platformy .NET: najpierw odinstalowałem platformę .NET, pobrałem Visual Studio z visualstudio.com i wybrałem „naprawę”.
Framework NET został zainstalowany automatycznie w Visual Studio -> i teraz działa dobrze!
źródło
Próbowałem kilka razy i w końcu rozwiązałem problem, kilkakrotnie odinstalowując VS2010. Myślę, że nie odinstalowałem wszystkich plików i dlatego nie zadziałało po raz pierwszy.
Podczas instalacji VS2012 mówi się, że jeśli masz VS2010 SP1, nie możesz pracować nad tym samym projektem w obu programach. Zaleca się mieć tylko jeden program.
Dzięki!
źródło
Miałem ten problem po zainstalowaniu Visual Studio 2017 i .NET Framework 4.6 na komputerze, który wcześniej miał Visual Studio 2010.
Problem polegał na tym, że po takiej instalacji plik msvcr100_clr0400.dll z C: \ Windows \ System32 został nadpisany nowym plikiem o bardzo małym rozmiarze ~ 19 Kb, jednak poprzedni miał rozmiar ~ 800 Kb.
Po ręcznym przywróceniu pliku z innej maszyny kompilacyjnej cvtres.exe zaczął działać poprawnie.
źródło