我正在使用Roslyn查找方法引用。
我有三个不同的项目在同一个解决方案。
UI=>BLL=>分贝
UI调用BLL中名为GetData的方法,BLL调用DB中名为GetData的方法
在BLL项目中查找方法引用时,会在UI中找到引用。
但是在DB项目中查找引用时,找不到BLL中对GetData的引用(location属性为空)。你知道为什么它只出现在BLL项目的UI项目中吗?
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)
{
}
}
}
}
}
}
语义模型的诊断输出中只有警告。