代码之家  ›  专栏  ›  技术社区  ›  doorman

找不到方法引用的位置

  •  0
  • doorman  · 技术社区  · 6 年前

    我正在使用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)
                        {
                        }
                    }                                        
                }
            }                
        }
    }
    

    语义模型的诊断输出中只有警告。

    enter image description here

    1 回复  |  直到 6 年前
        1
  •  0
  •   doorman    6 年前

    因此,该问题与由于msbuild的正确版本出现问题而导致工作区未正确加载有关。 Strange diagnostics errors, prefedined type System... is not defined or imported