如何修复'错误MSB4018:;VCMessage”;任务意外失败'在Visual Studio 201



这就是我所看到的:

1>------ Build started: Project: xxx (xxxxxx), Configuration: Debug Win32 ------
1>C:Program Files (x86)MSBuildMicrosoft.Cppv4.0V120Microsoft.Cpp.Platform.targets(64,5): error MSB4018: The "VCMessage" task failed unexpectedly.
1>C:Program Files (x86)MSBuildMicrosoft.Cppv4.0V120Microsoft.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)MSBuildMicrosoft.Cppv4.0V120Microsoft.Cpp.Platform.targets(64,5): error MSB4018:    at System.Text.StringBuilder.AppendFormat(IFormatProvider provider, String format, Object[] args)
1>C:Program Files (x86)MSBuildMicrosoft.Cppv4.0V120Microsoft.Cpp.Platform.targets(64,5): error MSB4018:    at System.String.Format(IFormatProvider provider, String format, Object[] args)
1>C:Program Files (x86)MSBuildMicrosoft.Cppv4.0V120Microsoft.Cpp.Platform.targets(64,5): error MSB4018:    at Microsoft.Build.Shared.ResourceUtilities.FormatString(String unformatted, Object[] args)
1>C:Program Files (x86)MSBuildMicrosoft.Cppv4.0V120Microsoft.Cpp.Platform.targets(64,5): error MSB4018:    at Microsoft.Build.Utilities.TaskLoggingHelper.FormatString(String unformatted, Object[] args)
1>C:Program Files (x86)MSBuildMicrosoft.Cppv4.0V120Microsoft.Cpp.Platform.targets(64,5): error MSB4018:    at Microsoft.Build.Utilities.TaskLoggingHelper.FormatResourceString(String resourceName, Object[] args)
1>C:Program Files (x86)MSBuildMicrosoft.Cppv4.0V120Microsoft.Cpp.Platform.targets(64,5): error MSB4018:    at Microsoft.Build.Utilities.TaskLoggingHelper.LogErrorWithCodeFromResources(String messageResourceName, Object[] messageArgs)
1>C:Program Files (x86)MSBuildMicrosoft.Cppv4.0V120Microsoft.Cpp.Platform.targets(64,5): error MSB4018:    at Microsoft.Build.CPPTasks.VCMessage.Execute()
1>C:Program Files (x86)MSBuildMicrosoft.Cppv4.0V120Microsoft.Cpp.Platform.targets(64,5): error MSB4018:    at Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute()
1>C:Program Files (x86)MSBuildMicrosoft.Cppv4.0V120Microsoft.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 ==========

谷歌和SO搜索中列出的解决方案无法提供(删除尾部斜杠、恢复到默认的$(OutDir)$(TargetDir)路径等)


上下文

这涉及到从MSVC2012迁移过来的几个项目。从同一MSVC2012环境迁移来的具有相同项目/解决方案布局的其他项目并没有眨眼,而有些项目则出现了这种错误,这阻碍了任何成功的编译/构建结果。

修复

该错误是由于项目配置字段Platform Toolset为空。(.vcproj项目文件应在此列出v120等值)

之前

<PlatformToolset>
</PlatformToolset>

之后

<PlatformToolset>v120</PlatformToolset>

这个值可以在DevStudio中通过项目属性面板>配置属性>通用>平台工具集::从下拉列表中选择一个值来设置。


这是如何被发现的:

  • 在MSVC2013中创建相同类型的空项目

  • 使用Beyond Compare(或另一个可视化diff工具,可以通过跨块复制来轻松编辑被比较的文件)来跨块复制文件集并进行测试(通过重新加载到DevStudio并在其中运行build进程)。

  • 下一次跨项目设置位复制(如果您的原始项目有多个生成目标,如我的(Win32/x64/Itanium)),请再次测试。

  • 冲洗并重复上述操作,直到您的"新"项目显示出与旧项目相同的问题。缩小到.vcproj文件中的最小XML子集。


在这之前尝试过的相关SO问题和博客:

  • 如何修复Visual Studio 2010中的错误MSB4018
  • https://connect.microsoft.com/VisualStudio/feedback/details/757884/msb4018-with-a-backslash-after-target-name-in-project-settings(好吧,这个问题仍然存在……只是可能有一个稍微不同的咒语。我的麻烦发生在MSVC2013上,所有更新都是2015年3月的)
  • http://marlowa.blogspot.nl/2013/09/a-nasty-net-error-in-visual-studio-2010.html

结论:如果你遇到这个问题,请检查你所有的项目配置条目。而到了紧要关头,通过以上的比较和测试的分而治之的过程把bug挖出来。

我遇到了同样的问题。我的问题是我使用值来输出文件。我使用的是$(TaskName)$(TaskExt)而不是$(TargetName)$

正确的值可以是

在属性中->配置->Linker

输出文件=$(SolutionDir)\$(Platform)\$(Configuration)\$(TargetName)$(TargetExt)

在Visual Studio 2013中,当试图编译在设置不正确的项目中创建的程序时,会出现此错误。对我来说,这是在我清理安装时发生的。如果您正试图清除临时文件,请转到C: \Program Files(x86)\Microsoft Visual Studio\Installer\resources\app\layout并执行程序InstallCleanup.exe似乎会删除临时文件,但也会删除您的设置。特别是您正在创建的项目类型。

如何再现错误:

如果你这样做";"新项目";它将显示一些选项1)Atl 2)CLR 3)General 4)Win 32。您必须选择Win 32,然后选择Win32控制台或Win32项目。默认情况下,它会选择其他内容,然后在创建项目后,您会意识到Properties->链接器->系统->子系统应为/Subsystem:CONSOLE(或/Subsystem:WIN32)时为空。

修复此问题并尝试编译后,它将生成MSB4018错误。

总之,解决方案是重新创建项目,并验证设置是否按说明正确设置。

相关内容

  • 没有找到相关文章

最新更新