13

これは私が見るものです:

1>------ Build started: Project: xxx (xxx\xxx), Configuration: Debug Win32 ------
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Microsoft.Cpp.Platform.targets(64,5): error MSB4018: The "VCMessage" task failed unexpectedly.
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Microsoft.Cpp.Platform.targets(64,5): error MSB4018: System.FormatException: Index (zero based) must be greater than or equal to zero and less than the size of the argument list.
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Microsoft.Cpp.Platform.targets(64,5): error MSB4018:    at System.Text.StringBuilder.AppendFormat(IFormatProvider provider, String format, Object[] args)
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Microsoft.Cpp.Platform.targets(64,5): error MSB4018:    at System.String.Format(IFormatProvider provider, String format, Object[] args)
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Microsoft.Cpp.Platform.targets(64,5): error MSB4018:    at Microsoft.Build.Shared.ResourceUtilities.FormatString(String unformatted, Object[] args)
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Microsoft.Cpp.Platform.targets(64,5): error MSB4018:    at Microsoft.Build.Utilities.TaskLoggingHelper.FormatString(String unformatted, Object[] args)
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Microsoft.Cpp.Platform.targets(64,5): error MSB4018:    at Microsoft.Build.Utilities.TaskLoggingHelper.FormatResourceString(String resourceName, Object[] args)
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Microsoft.Cpp.Platform.targets(64,5): error MSB4018:    at Microsoft.Build.Utilities.TaskLoggingHelper.LogErrorWithCodeFromResources(String messageResourceName, Object[] messageArgs)
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Microsoft.Cpp.Platform.targets(64,5): error MSB4018:    at Microsoft.Build.CPPTasks.VCMessage.Execute()
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Microsoft.Cpp.Platform.targets(64,5): error MSB4018:    at Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute()
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Microsoft.Cpp.Platform.targets(64,5): error MSB4018:    at Microsoft.Build.BackEnd.TaskBuilder.<ExecuteInstantiatedTask>d__20.MoveNext()
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

GoogleおよびSO検索にリストされているソリューションは提供されません(末尾のスラッシュを削除する、デフォルト$(OutDir)または$(TargetDir)パスに戻すなど)。


環境

これは、MSVC2012 から移行されたいくつかのプロジェクトに関するものです。同じ MSVC2012 環境から移行された同じプロジェクト/ソリューション レイアウトの他のプロジェクトは瞬きしませんでしたが、一部のプロジェクトではこのエラーが発生し、コンパイル/ビルドの成功が妨げられました。

4

3 に答える 3

22

修正

このエラーは、プロジェクト構成フィールドPlatform Toolsetであることが原因でした。(.vcprojプロジェクト ファイルには、次のような値がリストされている必要がありv120ます)

:

<PlatformToolset>
</PlatformToolset>

:

<PlatformToolset>v120</PlatformToolset>

この値は、プロジェクトの [プロパティ] パネル > [構成プロパティ] > [全般] > [プラットフォーム ツールセット] を介して DevStudio で設定できます::そこのドロップダウンから値の 1 つを選択します。


これが明らかになった方法:

  • 同じタイプの MSVC2013 で空の新しいプロジェクトを作成します

  • Beyond Compare (または、チャンクをコピーすることで比較対象のファイルを簡単に編集できる別のビジュアル diff ツール) を使用して、ファイル セットをコピーし、テストします (DevStudio にリロードしてbuild、そこでプロセスを実行します)。

  • 次に、プロジェクト設定のビット全体をコピーし (元のプロジェクトに私のように複数のビルド ターゲットがある場合はブロックを複製します (Win32/x64/Itanium))、再度テストします。

  • 「新しい」プロジェクトで古いプロジェクトと同じ問題が発生するまで、上記の手順を繰り返します。ファイル内の最小限の XML サブセットに絞り込み.vcprojます。


このすべての前に試行された関連する SO の質問とブログ:

結論: この問題が発生した場合は、すべてのプロジェクト構成エントリを確認してください。そして、いざというときは、上記の比較とテストの分割統治プロセスによってバグを掘り出します。

于 2015-03-18T12:14:43.010 に答える