在VS2015中出现的MSBuild错误MSB4018:链接任务意外失败

16

在将一个包含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相关的建议解决方案,但都没有成功。错误信息“'The "Link" task failed unexpectedly'”甚至还未被Google索引。我猜这个问题与项目类型有关,因为它是解决方案中唯一用作资源DLL(即没有入口点等)的项目。VS2015对项目文件进行的唯一更改是“ToolsVersion: 4.0 => 14.0”和“PlatformToolset: v110_xp => v140_xp”。
有人有解决方法吗?
4个回答

19

我已经成功解决了这个问题,并想在此记录解决方案以供将来参考。

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

  • MSB4018: System.NullReferenceException: Object reference not set to an instance of an object.

'Link'任务访问了该空元素,导致任务失败:

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

移除相应的元素就可以解决这个问题:

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

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


非常有帮助。事实上,在<Link>...</Link>部分中有几个空元素,每个都必须被移除。 - Han
非常有帮助。我在<Link>...</Link>部分遇到了许多空元素的同样问题。 - Vishal Gupta
感谢您抽出时间记录解决方案。我在将项目升级到VS2015后遇到了同样的问题。与您的情况类似,项目文件在(32/64位)发布配置中的<GenerateDebugInformation>标签中缺少false值。 - hendalst

7
另一个解决方案是通过资源管理器删除上次构建生成的所有文件

请删除以下所有文件:

.\Project\bin

.\Project\obj

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


6

VS 2015:问题的解决方案如下:

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

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

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

这对我有用。

希望这些信息有所帮助。

祝你好运:)。


0
如果错误语句类似于“System.InvalidCastException: Unable to cast object of type 'System.Xml.XmlComment' to type 'System.Xml.XmlElement'”,那么您可以尝试以下操作:
卸载 .csproj 文件并检查项目 ToolsVersion。确保项目的 ToolsVersion 小于 14(例如 12)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接