如何使用 Roslyn 获取方法 call/class 声明的全名路径
How to get full name path for method call/class declaration using Roslyn
如何获取 Roslyn 方法调用的完整限定名称?
例如,
Request.QueryString
,来自 System.Web.UI
,我如何检测到它?
如何在同一项目但不同命名空间中声明 class?
以及来自同一项目的其他 classes 的函数调用。
感谢任何形式的帮助,谢谢!
您应该为所有项目文件的所有 SyntaxTree
创建编译。在它之后,您可以为任何节点使用符号信息:
static string Code =
@"namespace TestNamespace
{
public class Test
{
public int A { get; set; }
public int B { get; set; }
public Test(int a, int b)
{
A = a;
B = b;
}
}
}";
static void Main(string[] args)
{
var syntaxTree = CSharpSyntaxTree.ParseText(Code);
var syntaxTrees = new SyntaxTree[] { syntaxTree }; // Add SyntaxTree array from project files.
var compilation = CSharpCompilation.Create("tempAssembly", syntaxTrees);
var semanticModel = compilation.GetSemanticModel(syntaxTree);
var caretPosition = 46;
var symbol = SymbolFinder.FindSymbolAtPositionAsync(semanticModel, caretPosition, new AdhocWorkspace()).Result;
var fullName = symbol.ToString(); // fullName is "TestNamespace.Test"
}
如何获取 Roslyn 方法调用的完整限定名称?
例如,
Request.QueryString
,来自 System.Web.UI
,我如何检测到它?
如何在同一项目但不同命名空间中声明 class? 以及来自同一项目的其他 classes 的函数调用。
感谢任何形式的帮助,谢谢!
您应该为所有项目文件的所有 SyntaxTree
创建编译。在它之后,您可以为任何节点使用符号信息:
static string Code =
@"namespace TestNamespace
{
public class Test
{
public int A { get; set; }
public int B { get; set; }
public Test(int a, int b)
{
A = a;
B = b;
}
}
}";
static void Main(string[] args)
{
var syntaxTree = CSharpSyntaxTree.ParseText(Code);
var syntaxTrees = new SyntaxTree[] { syntaxTree }; // Add SyntaxTree array from project files.
var compilation = CSharpCompilation.Create("tempAssembly", syntaxTrees);
var semanticModel = compilation.GetSemanticModel(syntaxTree);
var caretPosition = 46;
var symbol = SymbolFinder.FindSymbolAtPositionAsync(semanticModel, caretPosition, new AdhocWorkspace()).Result;
var fullName = symbol.ToString(); // fullName is "TestNamespace.Test"
}