代码之家  ›  专栏  ›  技术社区  ›  Ger Hobbelt

如何修复Visual Studio 2013中的“error MSB4018:“VCMessage”任务意外失败”

  •  13
  • Ger Hobbelt  · 技术社区  · 9 年前

    这是我看到的:

    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 ==========
    

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


    上下文

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

    3 回复  |  直到 9 年前
        1
  •  22
  •   Community Michael Schmitz    7 年前

    修复

    错误是由于项目配置字段 Platform Toolset 存在 空的 。( .vcproj 项目文件应列出一个值,例如 v120 此处)

    之前 :

    <PlatformToolset>
    </PlatformToolset>
    

    之后 :

    <PlatformToolset>v120</PlatformToolset>
    

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


    这是如何被揭开的:

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

    • 使用Beyond Compare(或另一个视觉差异工具,它可以通过复制块轻松编辑正在比较的文件)来复制文件集并测试(通过重新加载到DevStudio并运行 build 在那里的过程)。

    • 下一次跨项目设置位进行复制(如果您的原始项目有多个构建目标(如我的(Win32/x64/Itanium)),则复制块),然后再次测试。

    • 冲洗并重复上述步骤,直到您的“新”项目出现与旧项目相同的问题。在 .vc项目 文件


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

    结论:如果遇到此问题,请检查所有项目配置条目。当紧要关头,通过上述比较和测试分而治之的过程找出问题所在。

        2
  •  1
  •   Saman    3 年前

    我也有同样的问题。我的问题是我使用值输出文件。我使用的是 $(任务名称)$(任务扩展) 而不是$(TargetName)$(TargetExt)

    正确的值可能是

    在属性->配置->连接器

    输出文件=$(SolutionDir)\$(平台)\$\ $(目标名称)$(目标扩展)

        3
  •  0
  •   Gustavo Rodríguez    4 年前

    在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错误。

    总之,解决方案是重新创建项目,并验证设置是否如所述正确设置。