如何创建Rider插件自定义Action?添加后未在工具菜单及搜索结果显示如何解决
问题原因
- 自定义Action未绑定到插件的Zone容器,Rider的IoC扫描不到该组件,导致没有注册到IDE的动作管理中心
- Action的数字ID或字符串ID与内置/其他插件的ID冲突,导致注册被跳过
- 未触发插件模板内置的Action清单生成任务,IDE无法读取到新添加的Action声明
- 调试用的IDE沙箱存在旧插件缓存,新修改的插件代码未被正确加载
- Action类放置的项目错误,后端动作代码写到了Rider前端项目中,无法被后端逻辑识别
解决步骤
- 给Action绑定插件自定义Zone
首先确认插件根目录下存在模板自动生成的Zone定义类,示例如下:
using JetBrains.Application.BuildScript.Application.Zones; [ZoneDefinition] public class MyPluginZone : IZone { }
之后给你的Action类添加Component属性绑定Zone,同时修改Action的ID避免冲突,修改后的完整代码如下:
[Action("你的插件唯一前缀.ActionShowMessageBox", "Show message box", Id = 987654321)] [Component(Zone = typeof(MyPluginZone))] public class ActionShowMessageBox : IExecutableAction, IInsertLast<ToolsMenu>{ public bool Update(IDataContext context, ActionPresentation presentation, DelegateUpdate nextUpdate) => true; public void Execute(IDataContext context, DelegateExecute nextExecute){ var solution = context.GetData(JetBrains.ProjectModel.DataContext.ProjectModelDataConstants.SOLUTION); MessageBox.ShowInfo(solution?.SolutionFile != null ? $"{solution.SolutionFile?.Name} solution is opened" : "No solution is opened"); } }
- 执行完整的解决方案重新生成,触发
GeneratePluginXml任务生成最新的动作注册清单,不要使用增量编译 - 清理调试沙箱缓存:可在插件项目的调试配置中,勾选「每次启动重置沙箱」选项,避免旧缓存干扰
- 确认Action类放在后缀为
.ReSharper的后端项目中,不要放到.Rider的前端项目里
修改完成后按F5启动调试,即可在Tools菜单和Ctrl+Shift+A搜索结果中找到对应的动作。
内容的提问来源于stack exchange,提问作者Apostolis Bekiaris
相关产品推荐
相关产品推荐

