找不到方法参考的位置
Location not found for a method reference
我正在使用 Roslyn 查找方法参考。
我在同一个解决方案中有三个不同的项目。
UI => BLL => DB
UI 在 BLL 中调用一个名为 GetData 的方法,BLL 在数据库中调用一个名为 GetData
的方法
在 BLL 项目中查找方法引用时,会找到 UI 中的引用。
但是在数据库项目中查找引用时,未找到 BLL 中对 GetData 的引用(位置 属性 为空)。知道为什么它只能在 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)
{
}
}
}
}
}
}
语义模型的诊断输出中只有警告。
所以问题与由于 msbuild 的正确版本问题导致工作区未正确加载有关。
我正在使用 Roslyn 查找方法参考。 我在同一个解决方案中有三个不同的项目。
UI => BLL => DB
UI 在 BLL 中调用一个名为 GetData 的方法,BLL 在数据库中调用一个名为 GetData
的方法在 BLL 项目中查找方法引用时,会找到 UI 中的引用。
但是在数据库项目中查找引用时,未找到 BLL 中对 GetData 的引用(位置 属性 为空)。知道为什么它只能在 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)
{
}
}
}
}
}
}
语义模型的诊断输出中只有警告。
所以问题与由于 msbuild 的正确版本问题导致工作区未正确加载有关。