2017-06-24 2 views
0

Ich suchte eine lange Zeit, aber habe nichts Konkretes darüber gefunden.Zugriff/Finden Sie alle Variablen in einem EnvDTE-Dokument zur Laufzeit (Visual Studio/C#/Erweiterung)

Ich schreibe eine Erweiterung für Visual Studio und möchte alle Variablen/Eigenschaften im ActiveDocument/Code-Dokument im geöffneten Projekt finden. Gibt es einen "einfachen" Weg, um sie zu bekommen, oder muss ich selbst danach suchen?

EDIT: Ich möchte Informationen über die Variablen in einem geöffneten Dokument sammeln. Zuerst möchte ich eine Liste erstellen, die ich an eine ListBox anbinde, wo der Benutzer alle verwendeten Variablen (und Methodenparameter - einfach alle mit der folgenden Syntax "Type VarName") sehen kann. Später werde ich die Funktionalität der Übersetzung dieser Variablen geben und das Dokument bearbeiten, um es in die neue Sprache zu ändern.

Ich hoffe, ich war spezifisch genug über mein Thema.

EDIT2: bezeich Cole Wu - MSFT 's Antwort als Lösung und habe meine Lösung auf Basis von Cole Wu - MSFT' s Antwort.

public void FindVariablesInDoc(EnvDTE.TextDocument haystackDoc) {  
    var objEditPt = haystackDoc.StartPoint.CreateEditPoint(); 
    var tree = CSharpSyntaxTree.ParseText(objEditPt.GetText(haystackDoc.EndPoint)); 
    var Mscorlib = MetadataReference.CreateFromFile(typeof(object).Assembly.Location); 
    var compilation = CSharpCompilation.Create("MyCompilation", syntaxTrees: new[] { tree }, references: new[] { Mscorlib }); 
    var model = compilation.GetSemanticModel(tree); 
    var variables = tree.GetRoot().DescendantNodes().Where(v => v is FieldDeclarationSyntax || v is LocalDeclarationStatementSyntax || v is PropertyDeclarationSyntax || v is ParameterSyntax); 
} 

Antwort

0

Gibt es eine „einfache“ Art und Weise, sie zu erhalten, oder muss ich für sie von mir suchen müssen?

Sie können roslyn verwenden, um alle Variablen in einem EnvDTE Dokument zur Laufzeit zu finden, finden Sie in dem folgenden Beispielcode (bitte installieren Microsoft.CodeAnalysis über Nuget).

+0

Ich musste VS15 neu installieren und einige Assemblys zum GAC hinzufügen, um Roslyn zu implementieren. Es scheint zu tun, was ich will, obwohl ich nicht weiß, wie man Informationen über die Variablen aus dem Code erhält, den du geteilt hast. (Danke übrigens!) Ich werde meine Frage präzisieren. –

+0

Ich habe lange gegen die Nuget-Pakete gekämpft, weil mein Projekt nicht mit der neuesten Version von Microsoft.CodeAnalysis (2.2.0 im Moment) funktioniert hat. –

Verwandte Themen