【问题标题】:MSBuild error MSB4018 in VS2015: The "Link" task failed unexpectedlyVS2015 中的 MSBuild 错误 MSB4018:“链接”任务意外失败
【发布时间】:2015-10-14 23:53:55
【问题描述】:

将包含 25 个项目的解决方案从 VS2012 Update 4 升级到 VS2015 RTM (14.0.23107.0) 后,在构建其中一个项目时出现以下错误:

(...) MSB4018: '“链接”任务意外失败。 (...) System.NullReferenceException:对象引用未设置为对象的实例。 (...)

这里是完整的输出:

1>------ Build started: Project: Buttons, Configuration: Release Win32 ------
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.CppCommon.targets(643,5): error MSB4018: The "Link" task failed unexpectedly.
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.CppCommon.targets(643,5): error MSB4018: System.NullReferenceException: Object reference not set to an instance of an object.
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.CppCommon.targets(643,5): error MSB4018:    at Microsoft.Build.CPPTasks.Link.ForcedRebuildRequired()
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.CppCommon.targets(643,5): error MSB4018:    at Microsoft.Build.CPPTasks.TrackedVCToolTask.ComputeOutOfDateSources()
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.CppCommon.targets(643,5): error MSB4018:    at Microsoft.Build.CPPTasks.TrackedVCToolTask.SkipTaskExecution()
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.CppCommon.targets(643,5): error MSB4018:    at Microsoft.Build.Utilities.ToolTask.Execute()
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.CppCommon.targets(643,5): error MSB4018:    at Microsoft.Build.CPPTasks.TrackedVCToolTask.Execute()
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.CppCommon.targets(643,5): error MSB4018:    at Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute()
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.CppCommon.targets(643,5): error MSB4018:    at Microsoft.Build.BackEnd.TaskBuilder.<ExecuteInstantiatedTask>d__1.MoveNext()
========== Build: 0 succeeded, 1 failed, 24 up-to-date, 0 skipped ==========

我已经尝试了几个与 MSB4018 相关的建议解决方案,但均未成功。错误'“链接”任务意外失败'甚至还没有被 Google 索引。我猜这个问题在某种程度上与项目的类型有关,因为它是解决方案中唯一用作资源 DLL 的项目(即没有入口点等)。 VS2015 对项目文件所做的唯一更改是“ToolsVersion: 4.0 => 14.0”和“PlatformToolset: v110_xp => v140_xp”。

有没有人可以解决这个问题?

【问题讨论】:

    标签: visual-studio-2012 msbuild visual-studio-2015


    【解决方案1】:

    我自己设法解决了这个问题,并想在此处记录解决方案以供将来参考。

    以下错误是由项目文件中的空 XML 元素引起的:

    • MSB4018:System.NullReferenceException:对象引用未设置为对象的实例。

    “链接”任务访问了空元素,但失败了:

    • MSB4018:“链接”任务意外失败。

    删除相应的元素解决了问题:

    <Link><GenerateDebugInformation></GenerateDebugInformation></Link>
    

    提示:从其他帖子中可以看出,许多 MSB4018 错误似乎与包含意外值的项目文件有关。

    【讨论】:

    • 非常有帮助。实际上,我在 ... 部分中有几个空元素。每个都必须删除。
    • 非常有帮助。我对 ... 部分中的许多空元素有同样的问题。
    • 感谢您花时间记录您的解决方案。将项目升级到 VS2015 后,我遇到了同样的问题。与您的原因类似,项目文件在两个(32/64 位)版本配置的&lt;GenerateDebugInformation&gt; 标记中都缺少false 值。
    【解决方案2】:

    另一种解决方案是通过资源管理器窗口从上次构建中删除所有生成的文件

    删除所有文件:

    .\Project\bin

    .\Project\obj

    虽然您可以直接通过 Visual Studio “清理”或“重建”,但这只会捕获一些文件。通过强制重新编译所有文件,所有内存位置现在将正确对齐,问题应该得到解决。

    【讨论】:

      【解决方案3】:

      VS 2015:问题的解决方法如下: 转到:

      项目属性->链接器->调试->生成调试信息,

      将此属性设置为优化调试 (/DEBUG)

      注意:当它为空白(未设置)时,我观察到了类似的问题。

      它对我有用。

      希望这些信息会有所帮助。

      祝你好运:)。

      【讨论】:

        【解决方案4】:

        如果错误语句类似于“System.InvalidCastException: Unable to cast object of type 'System.Xml.XmlComment' to type 'System.Xml.XmlElement'' 那么您可以尝试以下:

        卸载 .csproj 文件并检查 Project ToolsVersion。确保项目 ToolsVersion 小于 14(例如 12)。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-02-23
          • 1970-01-01
          • 2017-12-04
          • 2011-10-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-08-31
          相关资源
          最近更新 更多