2016-07-29 30 views
2

Ich benutze Roslyn Version 1.3.2 von Nuget in meinem Projekt. Zuerst habe ich versucht, diese Codes zu verwenden, um meinen Code formatieren:Wie verwendet man Formatter.Format (SyntaxNode, Workspace) in Roslyn?

var root = CSharpSyntaxTree.ParseText("filepath").GetRoot(); 
var workspace=MSBuildWorkspace.Create(); 
node=Formatter.Format(root,workspace); 

Und es IOException werfen, wenn die Ausführung MSBuildWorkspace.Create():

konnte nicht Datei oder Assembly ‚laden Microsoft.Build, Version = 14.0.0.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a 'oder eine seiner Abhängigkeiten. Die angegebene Datei wurde vom System nicht gefunden.

Dann habe ich versucht buildtools von Nuget zu installieren, da diese Frage sagte: MSBuildWorkspace.Create() throws exception

Und ich viele Fehler, so dass ich es deinstallieren und alle seine Dateien entfernen. Aber wenn ich versuche, MSBuildWorkspace.Create() aufzurufen, wird keine IOException ausgelöst. Ich habe keine Ahnung, wie das funktioniert.

Leider ist die SyntaxNode noch nicht formatiert werden, nachdem ich Formatter.Format genannt, auch wenn es keine Ausnahme oder eine Warnung oder Fehler überhaupt.

Eine weitere Sache, ich kann leicht etwas Code in einer Standalone-Konsolenanwendung formatieren, ohne buildtools oder IOException. Sie verwenden die gleichen Codes. Warum ist das mit meinem Projekt nicht vereinbar?

Also, was ist der richtige Weg, das zu verwenden, besser mit dem BuildTools-nugget-Paket?

Antwort

1

Der Arbeitsbereich muss die Syntax root (in einem Projekt) enthalten. Sie können nicht einfach einen leeren Arbeitsbereich übergeben.

Sofern Sie keine csproj oder sln laden möchten, benötigen Sie MSBuild überhaupt nicht; Sie können ein AdHocWorkspace erstellen, ein Projekt hinzufügen, Ihren Syntaxbaum hinzufügen und das Format formatieren.

+0

Vielen Dank für Ihre Informationen, und ich werde es versuchen, wenn ich zur Arbeit gehen, works.Thanks –

+0

es eine Menge! –