gpt4 book ai didi

c# - 无法使用 SyntaxTree 获取文档

转载 作者:行者123 更新时间:2023-11-30 15:29:37 25 4
gpt4 key购买 nike

我正在尝试在解决方案中查找某个类型的所有引用。我的起点是文件内的一个跨度(当前光标位置),例如 110:116。查看 Roslyn 附带的示例,我发现我需要 SymbolFinder.FindReferencesAsync(theType, solution)。我为测试解决方案创建了 File->NewProject,然后尝试:

  1. 创建语法树
  2. 加载解决方案
  3. 使用树找到Document//我在这里失败了,返回null
  4. 提取 ISymbol (theType)//如何?

我无法格式化下面的代码,所以这里有一个截图以便于阅读:

enter image description here

string fileContent = 
@"using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace APISampleUnitTestsCS
{
class Class1
{
}
}";

// it doesn;t matter if I supply or not the 2 and 3 parameters
var tree = SyntaxFactory.ParseSyntaxTree(fileContent, "thePathTo_fileContent", new CSharpParseOptions());

MSBuildWorkspace workspace = MSBuildWorkspace.Create();
// Open the solution within the workspace.
Microsoft.CodeAnalysis.Solution originalSolution = workspace.OpenSolutionAsync(dte.Solution.FileName).Result;

// document is null
var document = originalSolution.GetDocument(tree);

//var textSpan = new Microsoft.CodeAnalysis.Text.TextSpan(textExtent.Span.Span.Start, asd.Span.Span.Length);
var textSpan = new Microsoft.CodeAnalysis.Text.TextSpan(110, 116); //these values are for stackoverlow question

// at least I can get TypeDeclarationSyntax. But how to extraxt the ISymbol???
var tt = tree.GetRoot().FindNode(textSpan) as Microsoft.CodeAnalysis.CSharp.Syntax.TypeDeclarationSyntax;

最佳答案

solution.GetDocument(syntaxTree) 为您提供调用 GetSyntaxTreeAsync 时为您提供语法树的文档。您不能将任意语法树传递给它——只能是您从某处文档中获得的语​​法树。它只是一个方便的助手,可以从文档的来源“返回”文档。

我不确定你想从代码片段中做什么,所以我将做出三个猜测:

  1. 如果您正在尝试分析该解决方案中已有的文件,您应该使用在 originalSolution 中获得的解决方案对象并在那里找到文件文档。

  2. 如果您想进行分析,就好像该额外的树也已添加到您的文档中,您可以调用 Solution.AddDocument() 将其添加为文档,然后您可以从那里分析它。请记住 Roslyn 是不可变的,当您调用 Solution.AddDocument 时,您会得到一个新的解决方案来分析,所以请捕获它给您的东西!

  3. 如果您要做的只是找到一个已知名称的符号,请考虑在您的解决方案中找到包含该类型的项目,调用 GetCompilationAsync,然后调用 GetTypeByMetadataName 或遍历命名空间以获取您的类型符号。

关于c# - 无法使用 SyntaxTree 获取文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23399646/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com