gpt4 book ai didi

roslyn - 使用 roslyn,如何获取元数据引用中定义的类型的特定方法的符号?

转载 作者:行者123 更新时间:2023-12-04 10:59:48 25 4
gpt4 key购买 nike

我的解决方案在 roslyn 中构建正常,因此应该解析所有类型

我能够像这样获取在元数据程序集中定义的类型:

string typeName = "MyCompany.MyLibrary.MyType`1";
var theType = compilation.GetTypeByMetadataName(typeName);

当我查询成员名称时,我看到了类型上的方法,我想找到对该方法的所有引用,但我不知道应该如何获取该方法的符号。当我尝试

var symbols = compilation.GetSymbolsWithName("MethodName");

它总是返回 0。

而且我无论如何也看不到从我的类型导航到树中它下面的符号。

我无法获取语义模型并以这种方式找到符号,因为我没有用于元数据组装的语法树。

如果我在覆盖此方法时在当前解决方案中找到一个实现,我可以找到该符号,但我不想经历那个过程,我想直接转到该符号。

最佳答案

ITypeSymbolGetMembers它通过指定的名称返回类型为 ISymbol 的所有成员(第二次重载)。因此,您只需要检查返回的成员集是否至少包含一个 IMethodSymbol(或者您可以根据需要添加更具体的检查):

string typeName = "MyCompany.MyLibrary.MyType`1";
var theType = compilation.GetTypeByMetadataName(typeName);
if (!(theType is null))
{
foreach (var member in theType.GetMembers("MethodName"))
{
if (member is IMethodSymbol method) //may check that method has a special parameters, for example
{
// you found the first "MethodName" method
}
}
}

关于roslyn - 使用 roslyn,如何获取元数据引用中定义的类型的特定方法的符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58889853/

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