2017-02-16 4 views
0

Я получу символы локальных переменных в теле метода, поэтому я использую semanticModel.LookupSymbols.but, и результат не имеет ничего общего с локальными варами. код:Почему результат lookupsymbols api отличается?

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); 

, но если я попробовать другой путь, результат есть it.The код:

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

Что поделаешь? Что вы ожидали увидеть, и что вы на самом деле видели? – JoshVarty

+0

'tree.Length' не будет иметь никаких полезных символов. – SLaks

+0

Если tree.Length бесполезен, каков должен быть параметр? –

ответ

1

Есть две вещи, происходящие здесь:

  1. вы даете tree.Length параметр является место, которое вы запрашивая. Ваши локальные переменные не видны из этого местоположения.
  2. Ваши компиляции должны быть испорчены для одного образца кода или другого или обоих. Когда у вас есть компиляции, вызовите GetDiagnostics() и посмотрите, выглядят ли другие вещи, как они ошибаются. Возможно, вы почему-то не получили ссылки, связанные с приложением MSBuildWorkspace.
Смежные вопросы