Errore "LINK: errore irreversibile LNK1123: errore durante la conversione in COFF: file non valido o danneggiato" dopo l'installazione dell'anteprima di rilascio di Visual Studio 2012


535

Ho installato Visual Studio 2012 Release Preview e sembra che vada bene, ma ora quando provo a usare Visual Studio 2010 per compilare progetti C ++, ricevo il seguente messaggio di errore:

LINK: errore irreversibile LNK1123: errore durante la conversione in COFF: file non valido o danneggiato

Non ne sono sicuro al 100%, ma sembra essere correlato a progetti che .rccontengono file (risorse).

Ho provato a riparare Visual Studio 2010 da Installazione applicazioni e al riavvio, ma questo non ha alcun effetto.

Ottengo lo stesso errore anche se utilizzo Visual Studio 2012 RC per compilare i progetti C ++ quando impostato per utilizzare il set di strumenti di Visual Studio 2010. L'aggiornamento al set di strumenti di Visual Studio 2011 risolve il problema (ma ovviamente non voglio farlo per il codice di produzione).

Aggiornamento: ho disinstallato Visual Studio 2012 , riavviato e il problema persiste ancora! Aiuto!


È un problema di x86, di x64 o di entrambi? Lo vedo su un sistema operativo a 32 bit. Non ricordo di averlo visto su un sistema operativo a 64 bit.
JWW

Risposte:


652

Questo thread MSDN spiega come risolverlo.

Riassumere:

  • Disabilitare il collegamento incrementale, andando a

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

Modifiche (@CraigRinger): si noti che l'installazione di VS 2010 SP1 rimuoverà i compilatori a 64 bit . È necessario installare il pacchetto compilatore VS 2010 SP1 per ripristinarli.

Ciò riguarda Microsoft Windows SDK 7.1 per Windows 7 e .NET 4.0 e Visual Studio 2010 .


1
Ho riscontrato questo problema subito dopo l'installazione di .Net 4.5. L'installazione di VS2010 SP 1 l'ha risolto. Non ho installato VS 2012 in nessun momento.
KJAWolf,

2
Per disabilitare il collegamento incrementale con CMakefile: cmake.org/pipermail/cmake/2010-February/035174.html
Mappa X

2
In Qt in Visual Studio aggiungi al tuo .pro: QMAKE_LFLAGS + = / INCREMENTAL: NO Ha funzionato per me
gollumullog

5
@grundic Sort of. Abbiamo rinominato cvtres.exe da sdk di Win 7 in modo che link.exe non lo trovi e utilizzi invece quello nuovo da .NET 4.5. L'SDK di Windows 8 non contiene più gli strumenti da riga di comando. Ora devi installare almeno Visual Studio 2012 Express per desktop per ottenere gli strumenti da riga di comando dell'app desktop. La soluzione di ridenominazione è stata considerata la meno distruttiva e può essere facilmente copiata.
DuckPuppy,

2
@DuckPuppy per fortuna, abbiamo risolto questo problema rimuovendo completamente Microsoft .Net 4.5.1 dai nostri agenti di build e nuova installazione .Net 4.0. E successivamente abbiamo eseguito la reinstallazione di Microsoft SDK 7.0 con tutte le opzioni contrassegnate: questo ha risolto i nostri problemi. Inoltre, dopo questo incidente, abbiamo disabilitato gli aggiornamenti autmatic - per ogni evenienza.
grundic

249

Se la disabilitazione del collegamento incrementale non funziona per te e la disattivazione di "Embed Manifest" non funziona neanche, quindi cerca nel tuo percorso più versioni di CVTRES.exe.

Effettuando il debug con l'opzione / VERBOSE linker ho scoperto che il linker stava scrivendo quel messaggio di errore quando ha tentato di invocare cvtres e non è riuscito.

Si è scoperto che avevo due versioni di questa utility nel mio percorso. Uno alle C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\BIN\cvtres.exee uno alle C:\Windows\Microsoft.NET\Framework\v4.0.30319\cvtres.exe. Dopo l'installazione di VS2012, la versione VS2010 di cvtres.exe non funzionerà più. Se quello è il primo nel tuo percorso e il linker decide che deve convertire un file .res in formato oggetto COFF, il collegamento fallirà con LNK1123.

(Davvero fastidioso che il messaggio di errore non abbia nulla a che fare con il problema reale, ma questo non è insolito per un prodotto Microsoft.)

Basta eliminare / rinominare la versione precedente dell'utilità o riorganizzare la variabile PATH, in modo che la versione che funziona venga prima.

Tieni presente che per le build di strumenti x64 potresti dover controllare C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64dove c'è un altro cvtres.exe.


3
Ha funzionato per me. Grazie per aver incluso il suggerimento su / VERBOSE, che mostra come / perché invece che cosa magica fare.
M Katz,

1
Basta copiare il file più recente nella directory Framework sopra quello vecchio nella directory di Visual Studio.
Yochai Timmer,

Questo ha risolto anche il mio problema. Sto lavorando su un computer con un controllo dell'account utente rigoroso, quindi sono stato in grado di confermare quale cvtres.exe ha funzionato per primo dalla riga di comando. Prima eseguito dove cvtres.exe. Quindi "C: \ windows \ Microsoft.NET \ Framework \ v4.0.30319.cvtres.exe / machine: amd64 / verbose / out:" Nome dall'output dettagliato "/ readonly FileFromVerboutput.res. Un percorso ha mostrato un errore, .NET uno ha funzionato
user176692

50

Controlla la versione di cvtrs.exe:

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

Versione errata:
date: 2010/03/18
time: 01:16
size: 31,048 bytes
name: Cvtres.exe

Versione corretta
date:: 21/02/2011
time: 06:03 PM
size: 31.056 byte
name: cvtres.exe

Se hai una versione errata, dovresti copiare la versione corretta da:

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

e sostituisci quello qui:

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

vale a dire

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"

Questo potrebbe aiutare altre persone con problemi simili. Sto usando ms build e ho dovuto copiare questi file: msobj110.dll mspdb110.dll mspdbcore.dll mspdbsrv.exe da C: \ Programmi (x86) \ Microsoft Visual Studio 11.0 \ Common7 \ IDE in C: \ Programmi ( x86) \ Microsoft Visual Studio 11.0 \ VC \ bin oltre a questo, come da i-am-bryan.com/webs/tutorials/…
Kell,

Questo ha funzionato per me, ma il mio file "corretto" cvtres.exe aveva dimensioni, data, ecc. Diverse (sempre dal contenitore VS 2012)
aampere,

Per me risolto rinominando i cvtres da .... Studio 10.0 \ VC \ bin \ amd64 \, directory. Penso perché sto usando Intel, non
AMD

46

Secondo questa discussione nei forum MSDN: l' installazione di VS2012 RC interrompe i progetti VS ++ C ++ , semplicemente prendendo cvtres.exeda VS2010 SP1

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

o da VS2012

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

e copiarlo sull'installazione cvtres.exein VS2010 RTM (quella senza SP1 )

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

In questo modo, utilizzerai effettivamente la versione corretta di cvtres.exe11.0.51106.1.

Ripetere gli stessi passaggi per la versione a 64 bit dello strumento in C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64\cvtres.exe.

Questa soluzione è un'alternativa all'installazione di SP1 per VS2010 - in alcuni casi non è possibile installare SP1 (ovvero se è necessario supportare build pre-SP1).


1
Questo ha funzionato per me. Dato che sono su win7 64-bit, ho prima copiato cvtres.exe dalla cartella ... Framework64 \ v4.3 ..., ma questo non ha risolto il problema. Quindi l'ho copiato dalla cartella Framework \ v4.3 ... e questo ha risolto il problema GRAZIE !!!!!
falconK,

36

Se hai installato Visual Studio 2012 RC, ha installato .NET 4.5 RC.

Disinstallare .NET 4.5 RC e installare la versione richiesta (4.0 per VS 2010). Questo dovrebbe chiarire eventuali problemi che stai riscontrando.

Questo ha risolto lo stesso problema. Non è necessario disinstallare Visual Studio.


4
Grande!! Ho sostituito solo .NET 4.5 con .NET 4.0. e funziona benissimo !!
Manutd,

1
aggiornamento: disinstallare .net 4.5 e 4.0 per me risolve il problema (VS 2010 express). tuttavia Windows Update sembra aggiornarsi costantemente a .net 4.5.1, quindi devo ripeterlo ogni tanto. Tuttavia, installando "VS 2010 SP1" e voilà, VS 2010 express ora funziona anche con .Net 4.5.1 ancora installato.
rogerdpack,

15

È a causa di .NET Framework 4.5 che sostituisce .NET Framework 4.0. Ho disinstallato più volte Visual Studio 2010 senza fortuna. Quando ho rimosso .NET Framework 4.5 e reinstallato Visual Studio 2010, è andato tutto bene.

Vedi Disinstallare completamente Visual Studio 11 per eseguire una nuova installazione .


3
Confermalo !!!!!!! La semplice reinstallazione di VC2010 non aiuta. Dopo la cancellazione di framework4.5 RC è OK.
Inkooboo,

Ho installato umdh che installa .net 4.5 che ha rotto Visual Studio 2010. Dopo aver disinstallato .net 4.5 e reinstallato .net 4.0, Visual Studio è tornato in vita.
giovedì

14

Per me, l'impostazione di "Genera manifest" su "No" l'ha risolto. (Risolto anche con / INCREMENTAL: NO)


14

Se stai usando x64, ecco una risorsa che ti aiuterà :

Ciò accade perché Microsoft .NET 4.5 non è compatibile con Visual C ++ 10. La soluzione alternativa consiste nell'assicurarsi di eseguire la versione .NET di cvtres.exe anziché la versione Visual C ++. L'ho fatto rinominando le versioni Visual C ++ di quei file e copiando le versioni .NET al loro posto.

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

1
nota: funziona perché entrambi .NET Framework 4 Multi-targeting pack e .NET Framework 4.5.2 sono installati. Il file C:\windows\Microsoft.NET\Framework\v4.0.30319\cvtres.exeappartiene a .NET Framework 4 Multi-targeting pack. Questo sarà generalmente il caso se hai installato Windows SDK 7.1 e successivamente hai aggiornato .NET a 4.5.2. In questo caso, si può generalmente semplicemente cambiare titolo C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\cvtres.exeal cvtres-old.exee il più recente cvtres.exe(datato 8/30/17) saranno utilizzati e funzionano bene.
David C. Rankin,

13

Alla fine ho risolto questo problema eseguendo una disinstallazione completa di VS2012 RC, seguita da una disinstallazione completa di VS2010, quindi una reinstallazione da zero di VS2010.

Ci è voluta un'eternità, ma ora sono in grado di compilare nuovamente progetti C ++ in VS2010.


11

Il problema è stato magicamente risolto per me rimuovendo .NET 4.5 e sostituendolo con .NET 4.0 . Ho dovuto quindi riparare Visual Studio 2010, in qualche modo danneggiato.

Visual Studio 2012 era stato precedentemente installato e quindi non installato, il che potrebbe essere correlato al problema.


2
Questo ha funzionato per me. Ho ottenuto Net 4.5 come importante Windows Update. L'ho appena disinstallato, il che ha fatto fallire la compilazione in un modo nuovo. Quindi ho completamente riparato l' installazione di Visual Studio 2010 Express e questo ha risolto il problema.
hyde,

10

Non ho installato Visual Studio 2012, ma ho ancora visualizzato questo errore in Visual Studio 2010. L'ho risolto dopo aver installato Visual Studio 2010 SP1.


9

Ho avuto lo stesso problema con Microsoft Visual Studio 2010 Ultimate ed è stato risolto con il metodo descritto in questo video di YouTube

Il video suggerisce di rinominare il file cvtres.exe in C: \ Programmi (x86) \ Microsoft Visual Studio 10.0 \ VC \ bin (in my Win7X64 matchine) in cvtres-old.exe


6

+1 per l'utente Abbreviazione di una risposta che ha funzionato per me!

Ho provato a fare un po 'di debug con questo msbuild /v:diag, e sto vedendo che MSBuild sta cercando di incorporare un manifest nell'eseguibile, con <somename> .dll.embed.manifest.res sulla riga di comando del linker, dove quella è una risorsa file creato da <somename> .dll.embed.manifest. Ma il file manifest è un file di testo Unicode vuoto. (Cioè, un file a due byte con il prefisso Unicode 0xFEFF)

Quindi il problema di root sembra avere qualcosa a che fare con quel file manifest che non viene generato o che viene usato quando <somename> .dll.intermediate.manifest avrebbe dovuto essere usato.

Una soluzione alternativa sembra essere quella di disattivare l'opzione "Incorpora manifest" in Proprietà, Strumento manifest, Input e Output.


6

Non ha funzionato per me dopo Abilita collegamento incrementale -> "No (/ INCREMENTAL: NO)", ma funziona per me dopo aver eliminato il file rc.


5

Riassumere:

Step1

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

se il passaggio 1 non funziona, eseguire il passaggio 2

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

se il passaggio 2 non funziona, eseguire il passaggio 3 Copia il file uno di:

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

    Quindi, sostituisci a C: \ Programmi (x86) \ Microsoft Visual Studio 10.0 \ VC \ bin \ cvtres.exe Con me, fai 3 passaggi, funziona


4

A partire da gennaio 2014, per alcuni motivi ho installato .NET Framework 4.5.1, non so se a causa di un'installazione di software di terze parti o di un aggiornamento automatico.

Il 29 gennaio ho installato un componente e ho iniziato a ricevere il

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

Messaggio. A quel tempo, ho risolto evitando il collegamento incrementale.

Il 31 gennaio ho installato un altro componente di .NET Framework 4.5.1 e il trucco del collegamento incrementale non funzionava più. Ho quindi installato Visual Studio 2010 SP1, ma in seguito il problema è diventato:

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

Penso che SP1 abbia incasinato la mia installazione di Visual Studio 2010.

Quindi ho disinstallato .NET Framework 4.5.1, installato .NET Framework 4.0 e disinstallato e quindi reinstallato Visual Studio 2010. Ha funzionato per me.


3

Anche a causa dell'installazione del Service Pack si verifica l'errore, quindi provare a rimuovere / rinominare cvtres.exe nella cartella C: \ Programmi (x86) \ Microsoft Visual Studio 10.0 \ VC \ bin. Questo ha funzionato per me.


Ha funzionato per me. Ma non ho capito come fosse un problema. Sarebbe apprezzato se tu potessi dirmelo. Grazie.
DTdev,

2
Nella risposta di seguito, @Rich Peck ha spiegato il motivo di questo comportamento.
secchione

1

Ho impostato Abilita collegamento incrementale su "No (/ INCREMENTAL: NO)" e non funziona per me .

Quindi ho cambiato:

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

e funziona per me :)


Questo non funzionerà se è necessario creare un eseguibile che è debuggabile su una piattaforma WinXP.
Jay Elston,

scusa ma questa non è una soluzione ... stai cambiando set di strumenti che è un compilatore completamente diverso
Semih Ozmen,

1

La reinstallazione di CMake ha funzionato per me. La nuova copia di CMake ha scoperto che dovrebbe usare Visual Studio 11 anziché 10.


1

Stavo usando Windows SDK per la programmazione principale di Win32 e avevo .NET 4.5 installato per motivi "sconosciuti". L'ho disinstallato e installato 4.0 come le risposte precedenti e sì, ha funzionato anche per me.

Sono solo sbalordito dal fatto che ho dovuto usare l'inutile framework .NET per creare app Win32 usando l'SDK.


1

Ho risolto questo facendo quanto segue:

  1. Al prompt dei comandi, digitare msconfig e premere Invio.
  2. Fai clic sulla scheda servizi.
  3. Cerca "Esperienza applicativa" e metti il ​​segno di spunta (cioè seleziona questo per abilitare).
  4. Clicca OK. E riavvia se necessario.

Quindi il problema andrà per sempre. Costruisci in modo casuale ed esegui il debug dei tuoi progetti C ++ senza alcun disturbo.


Puoi anche abilitare il servizio Applicaton Experienc da services.msc
App Work,

2
Cosa fa questo per risolvere il problema?
mabraham,

1

Per quelli di voi che cercano una soluzione a questo problema con gli esempi di codice sorgente OpenGL SuperBible 6, la soluzione si basa su Release anziché su Debug . Tutti i progetti hanno disabilitato l'opzione di collegamento incrementale nella versione di rilascio .


1

Il mio problema era che sul mio PC avevo due percorsi che contenevano le stesse librerie. Entrambi i percorsi sono stati aggiunti alle Directory librerie aggiuntive in Proprietà di configurazione -> Linker -> Generale . La rimozione di uno dei percorsi ha risolto il problema.


1

Ho avuto lo stesso problema dopo l'aggiornamento di .NET: ho prima disinstallato .NET Framework, scaricato Visual Studio da visualstudio.com e selezionato " Ripara ".

NET Framework è stato installato automaticamente con Visual Studio -> e ora funziona benissimo!


1

Ho provato alcune volte e alla fine ho risolto il problema disinstallando più volte VS2010. Penso di non aver disinstallato tutti i file ed è per questo che non ha funzionato per la prima volta.

Nell'installazione di VS2012, si dice che se si dispone di VS2010 SP1 non è possibile lavorare sullo stesso progetto in entrambi i programmi. Si consiglia di avere un solo programma.

Grazie!


1

Ho avuto questo problema dopo aver installato Visual Studio 2017 e .NET Framework 4.6 sul computer che in precedenza aveva Visual Studio 2010.

Il problema era che dopo tale installazione il file msvcr100_clr0400.dll da C: \ Windows \ System32 veniva sovrascritto con quello nuovo con una dimensione molto piccola ~ 19 Kb, tuttavia il primo era ~ 800 Kb.

Dopo aver ripristinato manualmente il file da un'altra macchina di compilazione, cvtres.exe ha ripreso a funzionare correttamente.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.