Roslyn - 查找带有完全限定名称的声明

3

我正在使用SymbolFinder.FindDeclarationsAsync()方法来查找项目中声明的符号。但是该方法无法匹配完全限定名称。

var symbols = SymbolFinder.FindDeclarationsAsync(projects, "String", true).Result;

以上代码返回了多个关于字符串的声明,例如System.String、System.Data.String、System.Reflection.String等。

是否有办法指定"System.String"并仅获取指定完全限定名称的ISymbol对象?


FindDeclarationsAsync是您在想要按非完整名称搜索时使用的API。请参考Kevin的答案获取正确的API。 - Jason Malinowski
1个回答

3

看起来你正在寻找 Compilation.GetTypeByMetadataName()



该方法目前存在问题,请参见 https://github.com/dotnet/roslyn/issues/3864 了解详情。向下滚动以获取解决方法。 - Grault
"Broken" 是一个相当强烈的措辞。这实际上是我们设计该方法的目的。我们考虑添加一个版本到 IAssemblySymbol 来处理这种情况,但目前还没有。我们也可以潜在地使该方法接受程序集限定名称。 - Kevin Pilch
我并不想让“broken”成为有争议的话题,但我无法想到一个简洁的方式来代表在GitHub上的对话。我采用了错误报告OP的方法,并创建了一个名为IEnumerable<INamedTypeSymbol> ResolveType的方法,其结果通常称为First。所以如果我要投票,那就是它。 - Grault

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接