我将在方法体中获取局部变量的符号,因此我使用semanticModel.LookupSymbols。但结果与本地变量无关。 代码是:
var workspace = MSBuildWorkspace.Create();
var solution = workspace.OpenSolutionAsync(soluPath).Result;
var doc = solution.Projects[0].Documents[0];
var tree = doc.getSyntaxTreeASync().Result;
var semanticModel = doc.getSemanticModelASync().Result;
var symbols = semanticModel.LookupSymbols(tree.Length);
但如果我尝试另一种方式,结果就有了它。代码是:
var tree=SyntaxFactory.ParseSyntaxTree(source);
var compilation = VisualBasicCompilation.Create("m",new []{tree},new[]{mscorlib});
var semanticModel = compilation.GetSemanticModel(tree);
var symbols=model.LookupSymbols(tree.Length);
示例来源:
Class C
End Class
Moudle Program
Private i As Integer = 0
Public Sub Main()
DIm j as Integer = 0 : j += i
End Sub
End Module
第一个代码输出:
C
Program
Public Sub Main()
第二个代码输出:
C
j
Microsoft
Private i As Integer
Program
Public Sub Main()
System
Windows
我的目标是本地变量" j"。 他们有什么不同? 感谢〜
答案 0 :(得分:1)
这里有两件事: