如何让Rider插件支持获取所有类型文件的本地路径?
解决Rider插件无法获取非代码文件路径的问题
你的代码中使用document.GetPsiSourceFile(solution)获取文件路径,该方法仅对具备PSI(Program Structure Interface)支持的代码文件(如C#、VB.NET)有效,txt这类纯文本文件没有对应的PSI源文件,因此会返回null,导致无法获取路径。
修改后的代码
public void Execute(IDataContext context, DelegateExecute nextExecute) { var solution = context.GetData(JetBrains.ProjectModel.DataContext.ProjectModelDataConstants.SOLUTION); if (solution == null) return; var textControl = context.GetData(TextControlDataConstants.TEXT_CONTROL); if (textControl == null) return; var document = textControl.Document; var offset = textControl.Caret.Offset(); var lineNumber = document.GetCoordsByOffset(offset).Line.Plus1(); // 优先从上下文获取通用文件对象,支持所有类型文件 var virtualFile = context.GetData(CommonDataConstants.VIRTUAL_FILE); if (virtualFile == null) { // 上下文未传递时,从Document获取对应文件作为备选 virtualFile = document.File; } if (virtualFile == null || !virtualFile.IsValid) return; var fullPath = $"{virtualFile.FullPath}?line={lineNumber}"; var file = solution.SolutionDirectory / "file.txt"; // 可添加后续逻辑,如写入文件、复制路径到剪贴板等 }
关键改动说明
- 替换核心文件获取逻辑:使用
CommonDataConstants.VIRTUAL_FILE从上下文获取VirtualFile,这是Rider中表示本地文件的通用对象,支持所有类型文件(代码、文本、配置文件等)。 - 增加 fallback 机制:当上下文未传递
VirtualFile时,从document.File获取文件对象,覆盖更多使用场景。 - 添加有效性校验:增加
virtualFile.IsValid判断,避免处理已失效的文件对象。
修改后插件即可获取所有已打开文件的本地路径,包括txt、md、json等非代码类型文件。
内容的提问来源于stack exchange,提问作者zubair Ahmad
相关产品推荐
相关产品推荐

