2014-05-12 5 views
11

Ich versuche MSBuildWorkspace class zu verwenden. Ich habe alle Assembly-Referenzen in meinem Projekt. Wenn ich die Referenz im Objektbrowser öffne, sehe ich den Namensraum und die Klasse, die ich verwenden möchte. Aber in meiner folgenden using-Anweisung,Typ oder Namespace nicht gefunden "fehlt Ihnen die Assemblyreferenz", während alle Referenzen korrekt sind

using Microsoft.CodeAnalysis.MSBuild

Ich erhalte ein

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

Aber komisch, dass Syntax-Highlighter erkennt der Typnamen, der die Compiler beschweren

enter image description here

Hier ist das Build-Protokoll

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

Haben Sie versucht, Assembly referenc neu zu erstellen/zu löschen/zu löschen und es erneut hinzuzufügen? –

+1

Targeting-Framework 4.5 und haben es stattdessen auf Client-Profil festgelegt? Etwas in dieser Richtung ...? –

+0

Es ist festgelegt, 4.5 zu verwenden. Ich sehe kein 4.5 Kundenprofil als Option. Ich habe 4 Client Profile ausprobiert und kann CodeAnalysis nicht mehr im Microsoft Namespace erkennen. – fahadash

Antwort

7

Ich fand this Blog post from Nansen und ich habe den Fix angewendet und mein Problem gelöst.

Zusammenfassung der Lösung: Bearbeiten Sie die csproj Datei im XML-Editor und die Elemente für die Referenzen, die Sie beunruhigen und fügen Sie das folgende Kind-Element zu denen.

<SpecificVersion>True</SpecificVersion>

Stellen Sie sicher, das Wort nur Anfangsbuchstaben in Großbuchstaben (True, nicht wahr oder TRUE) wahr ist.

Speichern und laden Sie das Projekt in VS und erstellen Sie es.

+1

Ich weiß, dass Sie die Antwort in einem anderen Blog gefunden haben. Aber können Sie bitte etwas mehr Details zu Ihrer Antwort in dem, was Sie getan haben, hinzufügen. Für den Fall, dass die Website in Zukunft tot ist, wird die Antwort hier sein. –

+2

Zusammenfassen und/oder extrahieren Sie relevante Informationen von externen Ressourcen. Wenn der Link/Blog nicht mehr zugänglich ist, würden die Leute (die diese "Antwort" lesen) nicht wissen, dass der Schlüssel zu der vorgeschlagenen Lösung eine spezifische Version ist. – user2864740

+1

Habe gerade getan. Danke, dass du es angesprochen hast. – fahadash

10

So folgt aus:

Warnung MSB3258: Die primäre Referenz "Microsoft.CodeAnalysis.Workspaces" konnte nicht aufgelöst werden, weil es eine indirekte Abhängigkeit von der .NET Framework-Assembly „Microsoft.Build, Version = hat 12.0.0.0 , Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a ", die eine höhere Version" 12.0.0.0 "als die Version" 4.0.0.0 "im aktuellen Zielframework hat.

Bedeutet, dass Sie mit Ihrem Projekt auf das .NET 4.0 Framework aufbauen. Sie sollten mit Visual Studio 2013 auf 4.5.1 abzielen. Andere Konfigurationen werden nicht unterstützt. Ich empfehle nicht, zu versuchen, dies zu "erzwingen", indem man die Warnung zum Schweigen bringt - das kann nur Probleme auf der Straße verursachen. Roslyn verwendet in 4.5 hinzugefügte APIs, sodass Sie Probleme haben werden, das Problem zum Schweigen zu bringen.

+0

Ich habe VS 2012. – fahadash

+0

Es ist auf 4,5 eingestellt. Ich war noch nie auf 4. Ich erstelle eine neue WPF-Anwendung mit meinem VS2012, die auf 4,5 voreingestellt ist. Dann füge ich Microsoft.CodeAnalysis durch Nuget hinzu und erhalte immer noch diesen Fehler. Wenn Sie uns dazu drängen, mehr Geld an Microsoft zu zahlen und auf 2013 zu aktualisieren, ist das nicht fair. – fahadash

+2

Nein, wir machen das nicht um mehr Geld zu verdienen. Während wir an Roslyn arbeiten, müssen wir Abhängigkeiten von neueren Komponenten des Frameworks und von Visual Studio nehmen, um einige tolle neue Funktionen zu entwickeln. Die Pflege von Builds, die sowohl auf neue Funktionen als auch auf ältere Versionen ausgerichtet sind, wird schwieriger, als es sich lohnt. –

0

hatte ich die gleiche Build-Fehlermeldung aus dem Build-Server generiert, wenn Sie einen Projektverweis in meinem Startprojekt mit - es funktionierte gut, wenn durch die VS2013 IDE Aufbau:

Der Typ oder Namespace-Name ‚XYZ‘ konnte nicht gefunden werden (sind Sie eine using-Direktive oder ein Assemblyverweis fehlt?)

nach MSBuild.exe lokal statt im Build-Server ausgeführt wird, konnte ich den Fehler duplizieren. Untersuchen der.csproj Datei für das Projekt anhand von aus der Lösung Entladen, bemerkte ich, dass ich die folgende Zeile an der Spitze hatte:

<Project DefaultTargets="Configure" xmlns="..." ToolsVersion="12.0"> 

ich es mit dieser Zeile nach der genauen Syntax des Startprojektes aktualisiert:

<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="..."> 

Es stellt sich heraus, dass die Eigenschaft DefaultTargets identisch sein musste. Aus diesem Grund wurde die Projektreferenz nicht in den Parameter '/ reference' aufgenommen, wenn Sie nach der Ausführung von MSBuild.exe versuchen, das Projekt mit dem Befehl CSC.exe zu kompilieren.

Ich brauchte eine Weile, um eine Lösung für dieses Problem zu finden, da ich in keinem Forum etwas Ähnliches finden konnte. Dies ist eine Legacy-Anwendung, die immer lokal statt in einem Build-Server erstellt wurde.

Übrigens funktioniert die Verwendung von PSBuild (PowerShell-Schnittstelle zu MSBuild) zusammen mit Markdown Pad 2 lokal sehr gut, wenn Sie versuchen, Build-Fehler zu beheben.