如何在 Visual Studio 2013 中修复 'error MSB4018: The "VCMessage" task failed unexpectedly'
How to fix 'error MSB4018: The "VCMessage" task failed unexpectedly' in Visual Studio 2013
这是我看到的:
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 环境迁移的具有相同 project/solution 布局的其他项目没有眨眼,而有些则出现此错误,这会阻止任何类型的成功 compile/build 结果。
修复
错误是由于项目配置字段 Platform Toolset
为 空 。 (.vcproj
项目文件应在此处列出一个值,例如 v120
)
之前:
<PlatformToolset>
</PlatformToolset>
之后:
<PlatformToolset>v120</PlatformToolset>
可以通过项目属性面板 > 配置属性 > 常规 > 平台工具集在 DevStudio 中设置此值:: 从那里的下拉列表中选择一个值。
发现方式:
在MSVC2013中创建一个空的new项目
使用 Beyond Compare(或其他视觉差异工具,可以通过复制块轻松编辑正在比较的文件)复制文件集并测试(通过重新加载到 DevStudio 和 运行在其中设置 build
进程)。
下一步复制项目设置的位(如果你的原始项目有多个构建目标,就像我的(Win32/x64/Itanium)一样复制块),再次测试。
冲洗并重复上述步骤,直到您的 'new' 项目出现与旧项目相同的问题。缩小到 .vcproj
文件中的最小 XML 子集。
之前尝试过的相关SO问题和博客:
- How do I fix Error MSB4018 in Visual Studio 2010?
- https://connect.microsoft.com/VisualStudio/feedback/details/757884/msb4018-with-a-backslash-after-target-name-in-project-settings(好吧,问题仍然存在......只是咒语略有不同。我的问题发生在 MSVC2013 上,所有更新都按照 March/2015)
- http://marlowa.blogspot.nl/2013/09/a-nasty-net-error-in-visual-studio-2010.html
结论:如果您运行遇到这个问题,请检查您所有的项目配置条目。到了紧要关头,通过上面的比较和测试分而治之的过程来挖掘bug。
在 Visual Studio 2013 年,您在尝试编译在设置不正确的项目中创建的程序时遇到此错误。对我来说,这是在我清理我的安装时发生的。如果你想清除你的临时文件并去
C:\Program Files (x86)\Microsoft Visual Studio\Installer\resources\app\layout 并执行程序 InstallCleanup.exe 它似乎删除了临时文件,但也删除了您的设置。特别是您正在创建的项目类型。
如何重现错误:
如果您执行“新建项目”,它将显示一些选项 1) Atl 2) CLR 3) 常规 4) Win 32。
您必须 select Win 32,然后选择 Win32 控制台或 Win32 项目。默认情况下,它 select 是其他东西,然后在创建项目后你会发现 Properties -> Linker -> System -> Subsystem 是空的,而它应该是 /SUBSYSTEM:CONSOLE(或 /SUBSYSTEM:WIN32)。
修复此问题并尝试编译后会生成 MSB4018 错误。
总之,解决方案是重新创建项目并验证设置是否按照说明正确设置。
我遇到了同样的问题。我的问题是我使用值来输出文件。我使用的是 $(TaskName)$(TaskExt) 而不是 $(TargetName)$(TargetExt)
正确的值可能是
在属性 -> 配置 -> 链接器中
输出文件 = $(SolutionDir)\$(Platform)\$(Configuration)\$(TargetName)$(TargetExt)
这是我看到的:
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 环境迁移的具有相同 project/solution 布局的其他项目没有眨眼,而有些则出现此错误,这会阻止任何类型的成功 compile/build 结果。
修复
错误是由于项目配置字段 Platform Toolset
为 空 。 (.vcproj
项目文件应在此处列出一个值,例如 v120
)
之前:
<PlatformToolset>
</PlatformToolset>
之后:
<PlatformToolset>v120</PlatformToolset>
可以通过项目属性面板 > 配置属性 > 常规 > 平台工具集在 DevStudio 中设置此值:: 从那里的下拉列表中选择一个值。
发现方式:
在MSVC2013中创建一个空的new项目
使用 Beyond Compare(或其他视觉差异工具,可以通过复制块轻松编辑正在比较的文件)复制文件集并测试(通过重新加载到 DevStudio 和 运行在其中设置
build
进程)。下一步复制项目设置的位(如果你的原始项目有多个构建目标,就像我的(Win32/x64/Itanium)一样复制块),再次测试。
冲洗并重复上述步骤,直到您的 'new' 项目出现与旧项目相同的问题。缩小到
.vcproj
文件中的最小 XML 子集。
之前尝试过的相关SO问题和博客:
- How do I fix Error MSB4018 in Visual Studio 2010?
- https://connect.microsoft.com/VisualStudio/feedback/details/757884/msb4018-with-a-backslash-after-target-name-in-project-settings(好吧,问题仍然存在......只是咒语略有不同。我的问题发生在 MSVC2013 上,所有更新都按照 March/2015)
- http://marlowa.blogspot.nl/2013/09/a-nasty-net-error-in-visual-studio-2010.html
结论:如果您运行遇到这个问题,请检查您所有的项目配置条目。到了紧要关头,通过上面的比较和测试分而治之的过程来挖掘bug。
在 Visual Studio 2013 年,您在尝试编译在设置不正确的项目中创建的程序时遇到此错误。对我来说,这是在我清理我的安装时发生的。如果你想清除你的临时文件并去 C:\Program Files (x86)\Microsoft Visual Studio\Installer\resources\app\layout 并执行程序 InstallCleanup.exe 它似乎删除了临时文件,但也删除了您的设置。特别是您正在创建的项目类型。
如何重现错误:
如果您执行“新建项目”,它将显示一些选项 1) Atl 2) CLR 3) 常规 4) Win 32。 您必须 select Win 32,然后选择 Win32 控制台或 Win32 项目。默认情况下,它 select 是其他东西,然后在创建项目后你会发现 Properties -> Linker -> System -> Subsystem 是空的,而它应该是 /SUBSYSTEM:CONSOLE(或 /SUBSYSTEM:WIN32)。
修复此问题并尝试编译后会生成 MSB4018 错误。
总之,解决方案是重新创建项目并验证设置是否按照说明正确设置。
我遇到了同样的问题。我的问题是我使用值来输出文件。我使用的是 $(TaskName)$(TaskExt) 而不是 $(TargetName)$(TargetExt)
正确的值可能是
在属性 -> 配置 -> 链接器中
输出文件 = $(SolutionDir)\$(Platform)\$(Configuration)\$(TargetName)$(TargetExt)