【发布时间】:2021-06-26 21:08:51
【问题描述】:
我正在编写一个 Rider/ReSharper nav-from-here 插件,它应该使用一些简单的规则根据我所站立的符号确定目标类型,最后导航到它。
第一部分还可以,我已经设法形成了所需的 FQN,但我在导航方面遇到了困难。我找到了this StackOverflow 帖子,并认为我可以尝试这种方法。所以我一直在尝试使用TypeFactory.CreateTypeByCLRName 两个小时来创建一个IDeclaredType 实例,以便能够使用GetTypeElement() 获取IDeclaredElement 并最终获得它的声明。但是 API 似乎发生了变化,无论我做什么,我的代码都无法正常工作。
这是我目前得到的:
// does not work with Modules.GetModules(), either
foreach (var psiModule in solution.GetPsiServices().Modules.GetSourceModules())
{
var type = TypeFactory.CreateTypeByCLRName("MyNamespace.MyClassName", psiModule);
var typeElement = type.GetTypeElement();
if (typeElement != null)
{
MessageBox.ShowInfo(psiModule.Name); // to make sure sth is happening
break;
}
}
奇怪的是,我实际上看到了一个消息框——但只有当带有MyClassName.cs 的选项卡处于活动状态时。当它处于焦点时,一切都很好。如果不是或文件已关闭,则无法解析该类,type.IsResolved 是 false。
我做错了什么?
【问题讨论】:
标签: c# resharper rider resharper-plugins