我的解决方案在roslyn中可以正常运行,因此应解决所有类型
我能够像这样在元数据程序集中获得定义的类型:
string typeName = "MyCompany.MyLibrary.MyType`1";
var theType = compilation.GetTypeByMetadataName(typeName);
,当我查询成员名称时,我会在类型上看到该方法,并且想找到对该方法的所有引用,但是我无法弄清楚应该如何获得该方法的符号。当我尝试
var symbols = compilation.GetSymbolsWithName("MethodName");
它总是返回0。
我仍然看不到从我的文字导航到树中其下方的符号的方法。
由于没有元数据汇编的语法树,因此无法获取语义模型并以这种方式找到符号。
如果我在重写此方法时在当前解决方案中找到实现,则可以找到符号,但是我不想遍历,我想直接转到符号。
答案 0 :(得分:0)
ITypeSymbol
具有GetMembers
,它以指定名称返回类型为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
}
}
}