Type ou espace de nom non trouvé «vous manque-t-il une référence d’assemblage» alors que toutes les références sont correctes

J’essaie d’utiliser la classe MSBuildWorkspace . J’ai toutes les références d’assemblage dans mon projet. Lorsque j’ouvre la référence dans le navigateur d’objects, je vois l’espace de noms et la classe que j’essaie d’utiliser. Mais dans ma déclaration d’utilisation suivante,

using Microsoft.CodeAnalysis.MSBuild

Je reçois un

 The type or namespace name 'MSBuild' does not exist in the namespace 'Microsoft.CodeAnalysis' (are you missing an assembly reference?) 

Mais drôle que Syntax Highlighter reconnaisse le nom du type, c’est le compilateur qui se plaint

entrez la description de l'image ici

Voici le log de construction

  1>c:\windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(1605,5): warning MSB3258: The primary reference "Microsoft.CodeAnalysis.Workspaces" could not be resolved because it has an indirect dependency on the .NET Framework assembly "Microsoft.Build, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" which has a higher version "12.0.0.0" than the version "4.0.0.0" in the current target framework. 1>c:\windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(1605,5): warning MSB3258: The primary reference "Microsoft.CodeAnalysis.VisualBasic.Workspaces" could not be resolved because it has an indirect dependency on the .NET Framework assembly "Microsoft.Build, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" which has a higher version "12.0.0.0" than the version "4.0.0.0" in the current target framework. 1>c:\windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(1605,5): warning MSB3258: The primary reference "Microsoft.CodeAnalysis.CSharp.Workspaces" could not be resolved because it has an indirect dependency on the .NET Framework assembly "Microsoft.Build, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" which has a higher version "12.0.0.0" than the version "4.0.0.0" in the current target framework. 1>c:\windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(1605,5): warning MSB3258: The primary reference "Microsoft.CodeAnalysis.Workspaces" could not be resolved because it has an indirect dependency on the .NET Framework assembly "Microsoft.Build.Framework, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" which has a higher version "12.0.0.0" than the version "4.0.0.0" in the current target framework. 1>c:\windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(1605,5): warning MSB3258: The primary reference "Microsoft.CodeAnalysis.VisualBasic.Workspaces" could not be resolved because it has an indirect dependency on the .NET Framework assembly "Microsoft.Build.Framework, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" which has a higher version "12.0.0.0" than the version "4.0.0.0" in the current target framework. 1>c:\windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(1605,5): warning MSB3258: The primary reference "Microsoft.CodeAnalysis.CSharp.Workspaces" could not be resolved because it has an indirect dependency on the .NET Framework assembly "Microsoft.Build.Framework, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" which has a higher version "12.0.0.0" than the version "4.0.0.0" in the current target framework. 1>c:\users\fahadash\documents\visual studio 2012\Projects\RoslynEditor\RoslynEditor\MainWindow.xaml.cs(37,36,37,43): error CS0234: The type or namespace name 'MSBuild' does not exist in the namespace 'Microsoft.CodeAnalysis' (are you missing an assembly reference?) 1>c:\users\fahadash\documents\visual studio 2012\Projects\RoslynEditor\RoslynEditor\MainWindow.xaml.cs(37,96,37,103): error CS0234: The type or namespace name 'MSBuild' does not exist in the namespace 'Microsoft.CodeAnalysis' (are you missing an assembly reference?) ========== Rebuild All: 0 succeeded, 1 failed, 0 skipped ========== 

Donc ça:

avertissement MSB3258: La référence principale “Microsoft.CodeAnalysis.Workspaces” n’a pas pu être résolue car elle dépend indirectement de l’assembly .NET Framework “Microsoft.Build, version = 12.0.0.0, Culture = neutre, PublicKeyToken = b03f5f7f11d50a3a” qui une version “12.0.0.0” supérieure à la version “4.0.0.0” dans le cadre cible actuel.

Cela signifie que vous construisez avec votre projet en ciblant le framework .NET 4.0. Vous devriez cibler la version 4.5.1 avec Visual Studio 2013. Les autres configurations ne sont pas sockets en charge. Je ne recommande pas d’essayer de “forcer” cela en faisant taire l’avertissement – cela peut simplement causer des problèmes plus tard. Roslyn utilise les API ajoutées à la version 4.5; vous aurez donc de la difficulté à réduire au silence le problème.

J’ai trouvé cette publication sur le blog de Nansen et j’ai appliqué le correctif et résolu le problème.

Résumé de la solution: modifiez le fichier csproj dans l’éditeur XML et recherchez les éléments des références qui vous préoccupent, puis ajoutez l’élément enfant suivant à ceux-ci.

True

Assurez-vous que le mot True n’est que la première lettre majuscule (True, pas vrai ou vrai).

Enregistrez et rechargez le projet dans VS et construisez-le.

Le même message d’erreur de génération a été généré à partir du serveur de génération lors de l’utilisation d’une référence de projet dans mon projet de démarrage. Il fonctionnait correctement lors de la génération via l’EDI VS2013:

Le type ou le nom de l’espace de noms ‘XYZ’ est introuvable (vous manque une directive using ou une référence d’assembly?)

Après avoir exécuté MSBuild.exe localement au lieu de dans le serveur de génération, j’ai été en mesure de dupliquer l’erreur. En examinant le fichier .csproj pour la référence du projet en le déchargeant de la solution, j’ai remarqué que la ligne suivante se trouvait en haut:

  

Je l’ai mis à jour avec cette ligne en respectant la syntaxe exacte du projet de démarrage:

  

Il s’avère que la propriété DefaultTargets devait être la même. C’est la raison pour laquelle la référence du projet n’était pas incluse dans le paramenter ‘/ reference’ lors de la tentative de compilation du projet avec la commande CSC.exe après l’exécution de MSBuild.exe.

Il m’a fallu un certain temps pour trouver une solution à ce problème car je ne pouvais rien trouver de semblable sur aucun forum. Il s’agit d’une application héritée qui a toujours été créée localement plutôt que sur un serveur de build.

En passant, l’utilisation de PSBuild (interface PowerShell avec MSBuild) avec Markdown Pad 2 fonctionne très bien localement lorsque vous essayez de résoudre les erreurs de génération.