web-dev-qa-db-fra.com

Erreur MSBuild MSB4018 dans VS2015: la tâche "Lien" a échoué de manière inattendue

Après la mise à niveau d'une solution avec 25 projets de VS2012 Update 4 à VS2015 RTM (14.0.23107.0), le message d'erreur suivant s'affiche lors de la construction de l'un des projets:

(...) MSB4018: 'La tâche "Lien" a échoué de manière inattendue. (...) System.NullReferenceException: la référence à un objet n'est pas définie sur une instance d'un objet. ' (...)

Voici la sortie complète:

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

J'ai déjà essayé plusieurs solutions suggérées liées au MSB4018 sans succès. L'erreur 'La tâche "Lien" a échoué de manière inattendue " n'a même pas encore été indexé par Google. J'imagine que ce problème est en quelque sorte lié au type de projet car il s'agit du seul projet de la solution qui est utilisé comme ressource DLL (c'est-à-dire sans point d'entrée, etc.). Les seules modifications apportées au fichier de projet par VS2015 sont "ToolsVersion: 4.0 => 14.0" et "PlatformToolset: v110_xp => v140_xp".

Est-ce que quelqu'un a une solution pour cela?

11
alex.dev

J'ai réussi à résoudre ce problème moi-même et je souhaiterais documenter la solution ici pour référence future.

L'erreur suivante a été provoquée par un élément XML vide dans le fichier de projet:

  • MSB4018: System.NullReferenceException: la référence à un objet n'est pas définie sur une instance d'un objet.

L'élément vide a été accédé par la tâche 'Link', qui a juste échoué:

  • MSB4018: 'La tâche "Lien" a échoué de manière inattendue.

La suppression de l'élément correspondant a résolu le problème:

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

Conseil: comme on peut le voir dans d'autres publications, de nombreuses erreurs MSB4018 semblent être liées à des fichiers de projet contenant des valeurs inattendues.

15
alex.dev

VS 2015: La solution du problème est la suivante: Goto:

Propriétés du projet-> Linker-> Debugging-> Generate Debug Info,

Définissez cette propriété sur Optimiser pour le débogage (/ DEBUG) ou Non

Remarque: j'ai observé un problème similaire lorsqu'il était vide (non défini).

Cela a fonctionné pour moi.

J'espère que cette information serait utile.

Bonne chance:).

5
xs2harpreet

Une autre solution consiste à supprimer tous les fichiers générés de la dernière construction via une fenêtre de l'Explorateur.

Supprimer tous les fichiers dans:

.\Project\bin

.\Project\obj

Vous pouvez "nettoyer" ou "reconstruire" directement via Visual Studio, mais cela ne capture que certains fichiers. En obligeant à recompiler tous les fichiers, tous les emplacements de mémoire sont désormais correctement alignés et le problème doit être résolu.

2
Kevin K

Si l'instruction d'erreur ressemble à quelque chose comme ' System.InvalidCastException: impossible de convertir l'objet de type' System.Xml.XmlComment 'en type' System.Xml.XmlElement '', vous pouvez alors essayer:

Déchargez le fichier .csproj et recherchez Project ToolsVersion. Assurez-vous que la version du projet ToolsVersion est inférieure à 14 (par exemple 12).

0