Visual Studio 2012リリースプレビューのインストール後のエラー「LINK:致命的なエラーLNK1123:COFFへの変換中にエラー:ファイルが無効または破損しています」


535

Visual Studio 2012リリースプレビューをインストールしましたが、問題ないようですが、Visual Studio 2010を使用してC ++プロジェクトをコンパイルしようとすると、次のエラーメッセージが表示されます。

リンク:致命的なエラーLNK1123:COFFへの変換中にエラーが発生しました:ファイルが無効または破損しています

100%確信はありませんが、.rc(リソース)ファイルが含まれているプロジェクトに関連しているようです。

プログラムの追加と削除からVisual Studio 2010を修復して再起動してみましたが、効果がありません。

Visual Studio 2010ツールセットを使用するように設定されている場合、Visual Studio 2012 RCを使用してC ++プロジェクトをコンパイルしても同じエラーが発生します。Visual Studio 2011ツールセットにアップグレードすると問題が修正されます(もちろん、量産コードでこれを実行したくありません)。

更新:Visual Studio 2012アンインストールして再起動しても問題は解決しません!助けて!


これはx86の問題、x64の問題、またはその両方ですか?32ビットオペレーティングシステムで見ています。64ビットオペレーティングシステムで見た覚えはありません。
jww 2017年

回答:


652

このMSDNスレッドは、それを修正する方法を説明しています。

要約する:

  • 次のようにして、インクリメンタルリンクを無効にします。

    Project Properties 
       -> Configuration Properties 
           -> Linker (General) 
              -> Enable Incremental Linking -> "No (/INCREMENTAL:NO)"
    
  • またはVS2010 SP1をインストールします。

編集(@CraigRinger):VS 2010 SP1をインストールすると、64ビットコンパイラー削除されることに注意してください。それらを元に戻すには、VS 2010 SP1コンパイラパックをインストールする必要があります。

これは、Windows 7用のMicrosoft Windows SDK 7.1、.NET 4.0、およびVisual Studio 2010に影響します


1
.Net 4.5をインストールした直後にこの問題に遭遇しました。VS2010 SP 1をインストールすると解決しました。VS 2012をインストールしていません。
KJAWolf 2013

2
CMakefileとのインクリメンタルリンクを無効にするには:cmake.org/pipermail/cmake/2010-February/035174.html
Map X

2
Visual StudioのQtで、.proに追加します。QMAKE_LFLAGS+ = / INCREMENTAL:NO Worked for me
gollumullog

5
@grundicソート。Windows 7 SDKからcvtres.exeの名前を変更したので、link.exeはそれを検出せず、代わりに.NET 4.5の新しいものを使用します。Windows 8 SDKには、コマンドラインツールは含まれていません。デスクトップアプリのコマンドラインツールを取得するには、少なくともVisual Studio 2012 Express for Desktopsをインストールする必要があります。名前の変更ソリューションは、最も混乱が少ないと見なされ、簡単にスクリプト化できます。
DuckPuppy 14

2
@DuckPuppyは幸いにも、ビルドエージェントからMicrosoft .Net 4.5.1を完全に削除し、フレッシュインストール.Net 4.0をインストールすることで、この問題を解決しました。その後、Microsoft SDK 7.0の再インストールを実行し、すべてのオプションをマークしました-これで問題が解決しました。また、この事件の後、念のため、自動更新を無効にしました。
グランディ14

249

インクリメンタルリンクを無効にしても機能せず、「埋め込みマニフェスト」をオフにしても機能しない場合は、パスでCVTRES.exeの複数のバージョンを検索します。

/ VERBOSEリンカーオプションを使用してデバッグしたところ、cvtresを呼び出そうとして失敗したときに、リンカーがそのエラーメッセージを書き込んでいたことがわかりました。

私のパスには、このユーティリティの2つのバージョンがあることがわかりました。1 C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\BIN\cvtres.exeつと1つC:\Windows\Microsoft.NET\Framework\v4.0.30319\cvtres.exe。VS2012のインストール後、VS2010バージョンのcvtres.exeは機能しなくなります。それがパスの最初のものであり、リンカが.resファイルをCOFFオブジェクト形式に変換する必要があると判断した場合、リンクはLNK1123で失敗します。

(エラーメッセージが実際の問題とは無関係であることを本当に苛立たせますが、それはマイクロソフト製品にとって珍しいことではありません。)

ユーティリティの古いバージョンを削除/名前変更するか、PATH変数を再配置して、機能するバージョンが最初になるようにします。

x64ツールビルドの場合、C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64別の場所があるかどうかも確認する必要があることに注意してくださいcvtres.exe


3
私のために働いた。/ VERBOSEに関するヒントを含めていただき、ありがとうございます。魔法のようなことをするのではなく、方法/理由を示しています。
M Katz 2014年

1
Frameworkディレクトリの新しいファイルをVisual Studioディレクトリの古いファイルにコピーするだけです。
Yochai Timmer 14

これも私の問題を解決しました。厳密なUACを備えたコンピューターで作業しているため、コマンドラインから最初にどのcvtres.exeが機能しているかを確認できました。最初に実行された場所はcvtres.exeです。次に、「C:\ windows \ Microsoft.NET \ Framework \ v4.0.30319.cvtres.exe / machine:amd64 / verbose / out: "Name from verbose output" / readonly FileFromVerboutput.res。1つのパスでエラーが発生し、.NET一つは働いていた。
user176692

50

のバージョンを確認してくださいcvtrs.exe

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

間違ったバージョン::
date03/18/2010:01 :16
timePM
size:31,048バイト
name:cvtres.exe

正しいバージョン::
date02/21/2011:06
time:03 PM
size:31,056バイト
name:cvtres.exe

間違ったバージョンがある場合は、正しいバージョンを以下からコピーする必要があります。

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

ここで1つ置き換えます。

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

すなわち

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"

これは、同様の問題を持つ他の一部の人々を助けるかもしれません。私はmsビルドを使用していて、これらのファイルをコピーする必要がありました:msobj110.dll mspdb110.dll mspdbcore.dll mspdbsrv.exe C:\ Program Files(x86)\ Microsoft Visual Studio 11.0 \ Common7 \ IDE to C:\ Program Files( x86)\ Microsoft Visual Studio 11.0 \ VC \ binこれに加えて、i-am-bryan.com
Kell

これは私にとってはうまくいきましたが、「正しい」cvtres.exeファイルはサイズや日付などが異なりました(それでもVS 2012のビンからですが)
aampere

.... Studio 10.0 \ VC \ bin \ amd64 \ディレクトリからcvtresの名前を変更することで解決しました。
AMD

46

MSDNフォーラムのこのスレッドによると:VS2012 RCのインストールはVS2010 C ++プロジェクトを中断します。単純に、VS2010 SP1cvtres.exeから取得します

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

またはVS2012から

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

そして上でそれをコピーcvtres.exeVS2010 RTMインストール(1 SP1なし

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

このようにして、cvtres.exe11.0.51106.1の修正バージョンを効果的に使用できます。

のツールの64ビットバージョンに対して同じ手順を繰り返しますC:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64\cvtres.exe

このソリューションは、VS2010のSP1のインストールに代わるものです。場合によっては、SP1をインストールできないことがあります(つまり、SP1以前のビルドをサポートする必要がある場合)。


1
それでうまくいきました。私はwin7 64ビットを使用しているので、最初に... Framework64 \ v4.3 ...フォルダーからcvtres.exeをコピーしましたが、問題は解決しませんでした。次に、Framework \ v4.3 ...フォルダーからコピーし、問題を解決しました。ありがとう!!!!!!
falconK 2016

36

Visual Studio 2012 RCをインストールしている場合は、.NET 4.5 RCがインストールされています。

.NET 4.5 RCをアンインストールし、必要なバージョン(VS 2010の場合は4.0)をインストールします。これにより、発生している問題が解決されます。

これは同じ問題を解決しました。Visual Studioをアンインストールする必要はありません。


4
すごい!!.NET 4.5だけを.NET 4.0に置き換えました。そしてそれはうまくいきます!!
manutd

1
更新:.net 4.5と4.0をアンインストールすると修正されます(VS 2010 Express)。ただし、Windowsの更新は常に.net 4.5.1にアップグレードされるように見えるため、これを頻繁に繰り返す必要があります。ただし、「VS 2010 SP1」と出来上がりのVS 2010 Expressをインストールすると、.Net 4.5.1がインストールされたまま、VS 2010 Expressも機能するようになりました。
rogerdpack 2014年

15

これは、.NET Framework 4.5が.NET Framework 4.0に取って代わったためです。Visual Studio 2010を数回アンインストールしましたが、うまくいきませんでした。.NET Framework 4.5を削除してVisual Studio 2010を再インストールしたところ、問題なく動作しました。

新規インストールを行うには、Visual Studio 11を完全にアンインストールするを参照してください。


3
それを確認する!!!!!!! VC2010を再インストールするだけでは役に立ちません。framework4.5 RCの削除後、問題ありません。
inkooboo 2012

私は.net 4.5をインストールするumdhをインストールしましたが、これはVisual Studio 2010を壊しました。
2014年

14

私にとっては、「マニフェストを生成」を「いいえ」に設定することで修正されました。(/ INCREMENTAL:NOでも修正済み)


14

x64を使用している場合は、次のリソースが役立ちます

これは、Microsoft .NET 4.5がVisual C ++ 10と互換性がないために発生します。回避策は、Visual C ++バージョンではなく.NETバージョンのcvtres.exeを実行することです。これを行うには、これらのファイルのVisual C ++バージョンの名前を変更し、代わりに.NETバージョンをコピーしました。

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
注:両方のためにこの作品.NET Framework 4 Multi-targeting pack とが .NET Framework 4.5.2設置されています。ファイルC:\windows\Microsoft.NET\Framework\v4.0.30319\cvtres.exeはに属してい.NET Framework 4 Multi-targeting packます。これは通常、Windows SDK 7.1をインストールし、後で.NETを4.5.2に更新した場合に当てはまります。この場合、通常は単にに名前C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\cvtres.exeを変更するだけでよくcvtres-old.exe、新しいcvtres.exe(日付は8/30/17)が使用され、正常に動作します。
デビッドC.ランキン

13

VS2012 RCを完全にアンインストールしてからVS2010を完全にアンインストールし、VS2010を最初から再インストールすることで、最終的にこの問題を解決しました。

それは永遠にかかりましたが、VS2010でC ++プロジェクトを再びコンパイルできるようになりました。


11

この問題は、.NET 4.5を削除し、.NET 4.0に置き換えることで魔法のように解決されました。次に、Visual Studio 2010を修復する必要がありました-途中で破損しています。

以前にVisual Studio 2012をインストールしてからアンインストールしました-これは問題に関連している可能性があります。


2
これでうまくいきました。重要なWindows UpdateとしてNet 4.5を入手しました。アンインストールしたところ、新しい方法でビルドが失敗しました。次に、Visual Studio 2010 Expressのインストールを完全に修復し、問題を修正しました。
hyde 14

10

Visual Studio 2012をインストールしていませんが、このエラーはVisual Studio 2010でも発生します。VisualStudio 2010 SP1をインストールした後、この問題は解決しました。


9

Microsoft Visual Studio 2010 Ultimateでも同じ問題が発生しましたが、この動画で説明されている方法で解決しました

ビデオは、ファイル名前を変更することを提案cvtres.exeC:\プログラムファイル(x86の)\のMicrosoft Visual Studioの10.0 \ VC \ binに (in my Win7X64 matchine)までCVTRES-old.exe


6

ユーザーのShortに+1すると、私にとって有効な回答が得られます。

私はこれを使っていくつかのデバッグを試みましたがmsbuild /v:diagMSBuildが実行可能ファイルにマニフェストを埋め込もうとしていることがわかります。 <somename> .dll.embed.manifestから構築されたファイル。ただし、マニフェストファイルは空のUnicodeテキストファイルです。(つまり、Unicode 0xFEFF接頭辞が付いた2バイトのファイル)

したがって、根本的な問題は、そのマニフェストファイルが生成されていないか、<somename> .dll.intermediate.manifestが使用されているはずのときに使用されているようです。

別の解決策は、プロパティ、マニフェストツール、入力および出力の下の「埋め込みマニフェスト」オプションをオフにすることです。


6

増分リンクを有効にした後は機能しませんでした-> "いいえ(/INCREMENTAL:NO)"。rcファイルを削除した後は機能します。


5

要約する:

Step1

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

ステップ1が機能しない場合は、ステップ2を実行します。

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

ステップ2が機能しない場合は、ステップ3のファイルをコピーします。

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

    次に、C:\ Program Files(x86)\ Microsoft Visual Studio 10.0 \ VC \ bin \ cvtres.exeに置き換えます。


4

2014年1月の時点で、いくつかの理由で.NET Framework 4.5.1をインストールしましたが、サードパーティソフトウェアのインストールが原因なのか、自動更新が原因なのかわかりません。

1月29日に、1つのコンポーネントをインストールしました。

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

メッセージ。その時、インクリメンタルリンクを避けて解決しました。

1月31日、.NET Framework 4.5.1の別のコンポーネントをインストールしましたが、インクリメンタルリンクトリックが機能しなくなりました。次に、Visual Studio 2010 SP1をインストールしましたが、その後問題が発生しました。

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

SP1がVisual Studio 2010のインストールを台無しにしたと思います。

そこで、.NET Framework 4.5.1をアンインストールし、.NET Framework 4.0をインストールしてアンインストールしてから、Visual Studio 2010を再インストールしました。


3

Service Packをインストールしてもエラーが発生する場合は、C:\ Program Files(x86)\ Microsoft Visual Studio 10.0 \ VC \ binフォルダーにあるcvtres.exeを削除/名前変更してみてください。これでうまくいきました。


それは私のために働いた。しかし、私はこれがどのように問題であるかを理解できませんでした。教えていただければ幸いです。ありがとう。
DTdev 2015年

2
以下の回答では、@ Rich Peckがこの動作の理由を説明しています。
オタク2015年

1

[ インクリメンタルリンク有効にする]を[いいえ(/ INCREMENTAL:NO)]に設定しましたが、機能しません

次に私は変更しました:

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

そしてそれは私のために働く:)


WinXPプラットフォームでデバッグ可能な実行可能ファイルを作成する必要がある場合、これは機能しません。
Jay Elston

申し訳ありませんが、これは解決策ではありません。完全に異なるコンパイラであるツールセットを変更しています
Semih Ozmen '27 / 10/27

1

CMakeを再インストールするとうまくいきました。CMakeの新しいコピーでは、10ではなくVisual Studio 11を使用する必要があることがわかりました。


1

コアWin32プログラミングにWindows SDKを使用していて、 "不明な"理由で.NET 4.5がインストールされていました。以前の回答と同じように、それをアンインストールして4.0をインストールしました。

SDKを使用してWin32アプリをビルドするために、役に立たない.NETフレームワークを使用しなければならなかったことにうんざりしています。


1

私はこれを次のようにして解決しました:

  1. コマンドプロンプトでmsconfigと入力し、Enterキーを押します。
  2. [サービス]タブをクリックします。
  3. 「アプリケーションエクスペリエンス」を探し、チェックマークを付けます(つまり、これを選択して有効にします)。
  4. OKをクリックします。必要に応じて再起動します。

したがって、問題は永遠に続きます。ランダムにビルドして、妨害なしにC ++プロジェクトをデバッグします。


services.mscからApplicaton Experiencサービスを有効にすることもできます
App Work

2
これは問題を解決するために何をしますか?
マブラハム2015年

1

OpenGL SuperBible 6番目のソースコードサンプルを使用してこの問題の解決策を探している方のために、解決策はDebugではなくReleaseで構築されています。すべてのプロジェクトで、リリースバージョンのインクリメンタルリンクオプションが無効になっています。


1

私の問題は、同じライブラリを含むPCに2つのパスがあったことです。両方のパスは、[ 構成プロパティ]-> [リンカー]-> [全般]追加のライブラリディレクトリ追加されました。パスの1つを削除すると、問題が解決しました。


1

.NETの更新後も同じ問題が発生しました。最初に.NETフレームワークをアンインストールし、visualstudio.comからビジュアルスタジオをダウンロードして、「修復」を選択しました。

NETフレームワークはビジュアルスタジオで自動的にインストールされました->そして今それはうまくいきます!


1

私は数回試しましたが、VS2010を数回アンインストールして問題を解決しました。私はすべてのファイルをアンインストールしていなかったと思います、それがそれが初めて機能しなかった理由です。

VS2012のインストールでは、VS2010 SP1を使用している場合、両方のプログラムで同じプロジェクトに取り組むことはできないと言われています。プログラムは1つだけにすることをお勧めします。

ありがとう!


1

以前Visual Studio 2010があったマシンにVisual Studio 2017と.NET Framework 4.6をインストールした後、この問題が発生しました。

問題は、そのようなインストール後、C:\ Windows \ System32 のファイルmsvcr100_clr0400.dllが、サイズが非常に小さい〜19 Kbの新しいファイルで上書きされましたが、以前のファイルは〜800 Kbでした。

別のビルドマシンから手動でファイルを復元した後、cvtres.exeは再び正常に動作し始めました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.