2016-05-20 5 views
0

Wenn ich ein Projekt (mit MSBuildWorkspace.Create().OpenProjectAsync().GetCompilationAsync(); kompilieren bekomme ich ein Compilation zurück, die in diesem Projekt x SyntaxTrees für die x Dateien enthält. Aber das Projekt auch Referenzen andere Projekte. kann ich die die Projekte innerhalb der References Eigenschaft des Compilation sehen, aber es scheint, dass Compliation.GetSemanticModel Aufruf nicht durch diese sieht.Wie für jeden Syntaxbaum in referenzierten Projekten der Projektzusammenstellung GetSemanticModel

Für eine beliebige SyntaxTree die irgendwo in meinem Projekt (einschließlich der referenzierten Projekt s) Muss ich manuell alle referenzierten Compilation des Root-Projekts durchsuchen oder gibt es Hilfsmethoden oder andere Ansätze?

Antwort

3

Sie müssen GetSemanticModel für die Kompilierung aufrufen, die diese Struktur enthält. Wenn also Projekt A von B abhängt und Sie zu einem Syntaxbaum in B gegangen sind, müssen Sie die Kompilation für B verwenden, um nach B zu fragen. Das liegt daran, dass A in B nicht wirklich über irgendetwas "weiß" se, es ist eine undurchsichtige Box.

Ihre beste Möglichkeit ist wahrscheinlich die Verwendung der Arbeitsbereich-API mehr. Wenn Sie OpenProjectAsync() aufgerufen haben, greifen Sie das Objekt Solution aus der Eigenschaft .Lösung. Von dort aus können Sie alle Projekte direkter durchgehen, und wenn Sie einen Baum haben, können Sie auch Solution.GetDocument(tree).GetSemanticModelAsync() tun.