Я использую Roslyn, чтобы найти ссылки на методы.У меня есть три разных проекта в одном решении.
UI => BLL => DB
Пользовательский интерфейс вызывает метод в BLL с именем GetData, а BLL вызывает метод в DB с именем GetData
При поиске ссылок на метод в проекте BLL ссылка в пользовательском интерфейсе найдена.
Но при поиске ссылки в проекте БД ссылка на GetData в BLL не найдена (свойство location пусто).Любая идея, почему он находится только в проекте пользовательского интерфейса для проекта BLL?
Вот код:
foreach (var file in p.Documents)
{
if (file.Name.StartsWith(".NETFramework") || file.Name.Contains("AssemblyInfo.cs"))
{
continue;
}
var semanticModel = file.GetSemanticModelAsync().Result;
var classParser = new ClassParser(semanticModel);
var tree = file.GetSyntaxTreeAsync().Result;
// Get public methods
var methodDeclarations = tree.GetRoot().DescendantNodes()
.OfType<MethodDeclarationSyntax>()
.Where(method => method.Modifiers.Any(modifier => modifier.Kind() == SyntaxKind.PublicKeyword)).ToList();
var methods = ParseMethods(methodDeclarations, file.Name);
var methodReferences = new List<MethodDTO>();
foreach (var method in methods)
{
var symbol = GetMethodSymbol(method.Name, semanticModel, file);
var references = SymbolFinder.FindReferencesAsync(symbol, solution).Result;
if (references != null && references.Any())
{
foreach (var reference in references)
{
if (reference.Locations.Any())
{
foreach (var location in reference.Locations)
{
}
}
}
}
}
}
В выходных данных диагностики есть только предупреждения для семантической модели.