尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

CodeRush 接入 GitHub Copilot:Visual Studio 开发流的 AI 增强实践

CodeRush 接入 GitHub Copilot:Visual Studio 开发流的 AI 增强实践 CodeRush v26.1.5 更新发布后最大的卖点不是又多了一批代码模板而是正式把 GitHub Copilot 拉进了 Visual Studio 的日常开发流。我用了一个多星期最直观的感受是以前 Copilot 是“隔壁工位的 AI 同事”你得复制代码、切窗口、粘过去问现在它更像是 CodeRush 这个老管家亲自带着的实习生你在编辑器里右键、在诊断窗口里点一下它就能接话。这篇文章想聊聊这次接入到底能给 Visual Studio 开发者带来哪些实际变化适合正在写 C#/.NET 的朋友参考也适合还在观望、纠结要不要同时装两个工具的人。1. 工具角色分工先弄清楚 Copilot 和 CodeRush 各自在干嘛很多人一听到“CodeRush 接入 GitHub Copilot”第一反应是“是不是用 CodeRush 替代 Copilot”或者“是不是 Copilot 把 CodeRush 的功能都覆盖了”实际用下来完全不是这么回事。这两个工具解决的问题层面根本不一样搞明白各自定位才看得懂这次接入的价值。1.1 GitHub Copilot 的强项与明显边界GitHub Copilot 不是一个 IDE 插件它是一个 AI 编程助手。它擅长的东西有三类第一类是补全你写一个方法签名它帮你填方法体写一行 SQL它帮你补后面的 join 和 where第二类是对话尤其是在 Copilot Chat 里你可以把一段代码选中直接问它“这段逻辑有什么问题”“帮我改成异步”第三类是生成比如根据一个接口定义生成实现类或者根据现有代码生成单元测试。但 Copilot 有一个不可忽略的边界它对你当前解决方案的“理解”是浅层的。它知道你打开的这份文件里有什么但不一定知道你整个解决方案的分层结构、团队命名规范、项目里已经存在的基类和约定。我见过不少同事让 Copilot 生成仓储层代码结果它把数据库上下文直接塞进了控制器代码能跑但架构是乱的。这不是 Copilot 笨而是它天然缺少对项目全貌的感知能力。1.2 CodeRush 的拿手好戏CodeRush 是 DevExpress 出品的 Visual Studio 增强工具资历比很多 AI 工具老得多。它在解决方案层面的能力非常强具体来说有四块一是导航CtrlShiftQ 可以跳转到任意类型和文件CtrlAltDown 可以快速查看一个方法的实现这些操作在大型项目里比 CtrlF 好用十倍二是模板输入ctor生成构造函数输入prop生成属性输入test生成测试方法骨架这些模板生成出来的代码风格完全受项目模板控制非常稳定三是重构提取方法、提取接口、封装字段、清理 using操作简单而且可以跨文件处理四是分析Code Issues 窗口会实时列出代码诊断项包括未使用的变量、可空引用警告、潜在的异常分支等。CodeRush 的弱项也很明显它不具备“创造性”。模板生成出来的东西都是它预设的你没法让它理解自然语言然后生成一段有业务含义的逻辑。以前遇到这种情况只能自己敲或者切到 Copilot Chat 手动复制粘贴。1.3 二者结合的真实价值所以这次 CodeRush v26.1.5 接入 GitHub Copilot本质上不是谁替代谁而是把 Copilot 的“生成能力”嵌入到了 CodeRush 已有的“结构能力”里。CodeRush 负责导航、重构、诊断、整理结构Copilot 负责生成代码、解释逻辑、提供修复方案。开发者不用再在两套工作流之间来回切换右键菜单里就能完成从“发现问题”到“让 AI 给出方案”再到“人工确认修改”的完整闭环。维度GitHub CopilotCodeRush核心能力代码补全、对话、生成测试导航、模板、重构、静态诊断对项目的理解基于当前上下文基于解决方案和代码分析输出特点灵活但有时不可控稳定且统一典型入口编辑器建议、聊天窗口右键菜单、工具窗口、快捷键换句话说Copilot 给了 CodeRush 一颗会思考的“大脑”而 CodeRush 给了 Copilot 一套能落地的“手脚”。这对 Visual Studio 开发者来说才是实际能提升生产力的关键。2. 升级接入安装、配置与第一个 AI 入口写这篇博文之前我特地在两台机器上完整过了一遍接入流程一台是 Visual Studio 2022一台是 Visual Studio 2026 预览版过程中踩了一些版本相关的坑这里把可复现的步骤整理出来。2.1 版本要求与环境检查接入 GitHub Copilot 不是装一个 CodeRush 就完事有三个前置条件必须满足。第一Visual Studio 版本不能太老我实测 VS 2022 的 17.6 以上版本和 VS 2026 都正常官方支持说明里也明确写了最低版本要求第二必须安装官方 GitHub Copilot 扩展并且已在 IDE 内完成账号登录这个登录状态是后续所有 AI 入口的授权基础第三CodeRush 本身必须是 v26.1.5 或更高版本如果你电脑上装的是旧版需要先升级。升级 CodeRush 的路径很简单菜单栏选“扩展” - “管理扩展”在已安装列表里检查 CodeRush 的版本号如果有更新会看到更新按钮。我遇到过一种情况——企业环境通过离线安装包部署的 CodeRush更新按钮是灰的这种需要从 DevExpress 官网下载对应版本的离线包手动覆盖安装。升级完之后务必重启 Visual Studio不然新版本的分析引擎不会生效右键菜单里也看不到 AI 相关入口。2.2 在 CodeRush 选项中开启 AI 集成装好之后默认情况下 AI 入口可能没有完全打开。打开“工具” - “选项”在左侧找到“CodeRush”节点里面有一个“AI”或者“Integration”子项不同小版本叫法会有差异v26.1.5 里叫“AI Services”。在这里可以看到提供方列表选中“GitHub Copilot”确认启用状态。这里有个细节如果你在 Visual Studio 的扩展管理器里能看到 Copilot 扩展已经被加载但在 CodeRush 的 AI 选项里依然显示未连接多半是账号授权没有同步。解决办法是打开一次 Copilot Chat 窗口随便问一个问题让 Copilot 扩展完成一次完整的身份校验再回到 CodeRush 选项里刷新状态一般就能识别到了。这个坑我一开始没注意到一度以为是版本不兼容。另外CodeRush 的 AI 选项里通常有几个开关是否在右键菜单显示 AI 操作、是否允许 Code Issues 面板调用 Copilot 修复、是否在模板生成后自动触发 Copilot 补全。我的建议是刚上手的时候先全部开启用几天再按需关闭。关闭后只是入口不显示不影响已经生成的代码不用担心。2.3 接入后第一眼看到的变化配置完成并重启 Visual Studio 后你会立刻发现几个明显的入口变化。第一在代码编辑器里选中一段代码并右键菜单中出现了“Ask Copilot”“Explain with Copilot”“Fix with Copilot”之类的选项这和以前只能去 Copilot Chat 里粘贴代码完全不同第二CodeRush 的 Code Issues 窗口里每一条诊断项的右键菜单也增加了 AI 操作可以直接把问题描述和上下文发送给 Copilot第三部分版本里还会在编辑器的选中文本附近出现一个小的 AI 悬浮按钮点开就是相关的 Copilot 命令。这几个入口看起来只是 UI 变化实际上改变的是工作习惯。以前你遇到一个错误先在 Code Issues 里看描述然后手动切到浏览器或 Copilot Chat把错误信息和代码片段粘贴过去再等回复整个过程至少打断两三次。现在右键点一下Copilot 就能拿着当前文件的上下文直接给建议省掉的不是几十秒而是思维连贯性。这对沉浸式编码体验的提升比省时间本身更重要。3. 实操链路代码生成后如何用导航和补全快速落地说清楚了配置接下来直接用真实场景演示。我给自己定的任务是在一个模拟电商项目的解决方案里新建一个订单查询服务。这个服务要接入已有的仓储接口返回订单数据并且做空值保护。整个过程中我尽量只依赖 CodeRush 和 Copilot模拟一个“尽量少手动敲键盘”的开发流程。3.1 场景设定与项目结构解决方案里已有这些内容一个IOrderRepository接口里面定义了GetByIdAsync(Guid id, CancellationToken ct)方法一个IDateTimeProvider接口用于获取当前时间以及一个Order实体类包含Id、TotalAmount、Status、CreatedAt等属性。我的任务是新建OrderQueryService并在其中实现一个GetOrderAsync方法返回订单如果订单不存在则抛出异常。这个场景很典型。难点不在代码本身而在于要和现有的接口、实体、异常类型对齐。如果让 Copilot 完全自由发挥它可能会自己创建一个OrderNotFoundException但项目里已经有一个放在Exceptions命名空间下的同名异常了这时候就需要 CodeRush 的导航能力来“纠偏”。3.2 用模板起手让 Copilot 补方法体我先新建一个类文件OrderQueryService.cs在类体里输入ctorCodeRush 立即弹出构造函数模板按 Tab 接受后会生成一个构造函数。然后在构造函数参数列表里我先手动输入IOrderRepository repository再输入IDateTimeProvider clockCodeRush 会自动把这两个参数赋值给对应的私有只读字段并生成字段声明。这一串操作下来的体感是CodeRush 把类骨架和构造函数这种固定结构快速搭好完全不需要手动写字段赋值。接下来是关键一步。我在类里输入一个空方法public async TaskOrder GetOrderAsync(Guid orderId, CancellationToken ct)然后光标停到方法体等一两秒GitHub Copilot 的灰色建议就出现了。它给出的实现大概是这样public async TaskOrder GetOrderAsync(Guid orderId, CancellationToken ct) { var order await _repository.GetByIdAsync(orderId, ct); if (order is null) throw new OrderNotFoundException(orderId); return order; }这个建议和项目现有的结构完全吻合_repository字段名正确异常类型也对没有多搞出多余的 using。我分析了一下为什么 Copilot 这次表现得这么准因为它看到了构造函数里 CodeRush 刚生成的字段看到了项目文件里已有的异常类型上下文足够完整它就不需要“猜”了。这就是 CodeRush 负责把结构搭好、让 Copilot 在稳定上下文里生成代码的真实案例。3.3 用导航在解决方案里跳转确认上下文等一下有人可能会问如果 Copilot 建议里的类型没有引入对应的命名空间怎么办这正是 CodeRush 导航发挥作用的地方。按 CtrlShiftQ 打开搜索框输入OrderNotFoundException可以直接从这个类文件跳到异常类的定义处确认它的命名空间和构造函数签名。确认后回到服务类如果using缺失代码下方会出现智能标记按 AltEnter 或者 Ctrl. 就能快速添加 using根本不需要手动去文件顶部敲。还有一种更省事的方式选中OrderNotFoundException这个类型名按 CtrlAltDownCodeRush 会显示这个类型的所有实现和引用你可以快速确认它有没有其他构造函数重载。我在这个场景里确认了异常类只有一个接受Guid参数的构造函数和 Copilot 的建议匹配于是放心接受。整个过程不超过二十秒。这个细节很值得展开说。很多开发者觉得 Copilot 生成代码之后“能用”就算完成但实际上“能用”和“和项目风格一致”是两回事。CodeRush 的导航和引用查找恰恰能让你在 AI 生成内容后快速验证它是否符合项目真实结构而不必靠肉眼去翻文件。3.4 用 Code Cleanup 收尾代码写完、可以编译通过之后还有一步不能省就是 Code Cleanup。在 CodeRush 菜单里选择“Code Cleanup”或者用快捷键 CtrlK、CtrlE它会按照你在选项中预设的规则清理代码包括排序 using、删除未使用的引用、统一花括号风格、调整空行位置等。Copilot 生成的代码有时候会在代码风格上比较随意比如空行多了少了、就近 using 的排序不对Code Cleanup 正好把这些不统一的地方一次性修掉。我实测在刚才那个场景里Copilot 生成的代码有一个未使用的 using可能是它从别的上下文推断带来的Code Cleanup 执行后自动被移除了同时异常抛出语句之后多出来的一个空行也被规范化了。这样提交到代码评审里的时候diff 会很干净不会因为 AI 生成的风格问题让同事产生额外阅读负担。这个小步骤看似简单但对实际项目协作很有意义。4. 修复闭环Code Issues 发现问题Copilot 提供方案接下来说一个更有意思的场景也是我最推荐的 CodeRush 和 Copilot 协作方式让 Code Issues 负责找出问题再让 Copilot 负责给出修复方案。这个流程以前不可能实现因为静态分析和 AI 之间的数据没有打通CodeRush v26.1.5 算是把这条路修通了。4.1 复现一个典型的代码问题我在解决方案里留了一个有问题的文件故意写了一个旧代码风格的方法public async Taskdecimal CalculateTotalAsync(ListOrder orders) { decimal total 0; foreach (var order in orders) { total order.TotalAmount; } return total; }这段代码能编译但存在几个问题方法名带Async但内部没有任何异步操作IDE 会给出警告ListOrder作为参数类型偏具体不够抽象total用foreach累加可以改成 LINQ 的Sum。在 CodeRush 的 Code Issues 窗口里这些诊断会依次列出来其中至少有一条标记为“Async method lacks await”的警告严重程度是建议。以前处理这种问题时要么手动改要么打开 Copilot Chat 把代码粘进去问“帮我优化”。这次我在 Code Issues 窗口里右键这条诊断菜单中直接出现了“Fix with Copilot”选项。点击之后CodeRush 会把当前方法的上下文、诊断信息和相关代码一起发送给 Copilot然后在编辑器里弹出一个内联的差异视图显示 Copilot 推荐的修改public decimal CalculateTotal(IReadOnlyCollectionOrder orders) { return orders.Sum(o o.TotalAmount); }这相当于把诊断问题、AI 方案、人工确认三个步骤压缩到了一个右键菜单里。省事是真的省事但这里我要提个醒不要无脑接受。4.2 人工确认与 CodeRush 重构兜底我遇到过不少情况Copilot 给出的修复方案方向对但细节有问题。比如上面这个例子Copilot 直接建议把ListOrder改成IReadOnlyCollectionOrder这在当前文件内没问题但如果你在接口里定义了相同签名的方法改动一个调用点可能整个调用链都要跟着变。这时候就需要 CodeRush 的“查找所有引用”功能列出所有调用CalculateTotal或CalculateTotalAsync的位置逐个确认影响面再决定是否接受 AI 的建议。所以我的习惯是Copilot 给方案CodeRush 给影响面。先看诊断、再让 AI 生成方案、然后用 CodeRush 查引用、最后手工接受或微调。这套流程下来既用了 AI 的效率又保留了人类对代码变更影响范围的判断。实际上这是一种“AI 提议、人类决策”的比较理想的落地形态而不是把修改权完全交给模型。这里还涉及一个常见情况Copilot 的修复方案可能引入了新的诊断。例如它把foreach改成了 LINQ但如果某个比Sum更适合的项目自定义扩展方法存在CodeRush 的 Code Issues 又会出现新的建议。这时候再次右键新诊断并让 Copilot 解释就能形成一个持续的反馈循环。说实话这个循环刚开始用的时候会有点上瘾因为每点一下都能看到代码在变好但注意控制节奏别把 AI 的建议全部照单全收关键逻辑还是得自己把关。5. 测试与重构联动从生成到跑通代码写完了也修复完了下一步自然是测试和重构。这一节我用两个小场景展开讲讲 Copilot 和 CodeRush 在测试、重构联动上的真实表现。5.1 一键生成单元测试并运行单元测试这个场景两个工具各有各的玩法。CodeRush 本身自带测试生成模板可以快速生成一个测试方法的骨架比如选一个方法右键选择“Create Unit Tests”它会生成一个基本的[Fact]或者[TestMethod]方法里面有一个Assert占位。GitHub Copilot 则更擅长生成测试逻辑本身比如根据方法的行为构造测试数据、设置 mock 的返回结果、断言具体的返回值。在接入之后我可以在同一个右键菜单里完成这两件事先用 CodeRush 模板生成测试方法再在空的方法体里通过 Copilot 补全测试逻辑。举个例子我给订单查询服务写测试[Fact] public async Task GetOrderAsync_WhenOrderNotFound_Throws() { var fixture new Fixture(); var repository Substitute.ForIOrderRepository(); var clock Substitute.ForIDateTimeProvider(); var service new OrderQueryService(repository, clock); repository.GetByIdAsync(Arg.AnyGuid(), Arg.AnyCancellationToken()) .Returns(Task.FromResultOrder(null)); await Assert.ThrowsAsyncOrderNotFoundException( () service.GetOrderAsync(Guid.NewGuid(), CancellationToken.None)); }这里 Copilot 生成了整个测试逻辑包括 mock 和断言CodeRush 则负责让这个测试方法能在 Test Runner 里被识别并运行。CodeRush 自带的 Test Runner 窗口可以直接列出当前测试类中的所有测试点击运行结果会在一个独立的工具窗口里展示不用等 Visual Studio 自带的测试资源管理器慢慢刷新。实测下来这个组合比单独用任何一方都顺滑。5.2 重构时 Copilot 和 CodeRush 的配合再来看一个更典型的重构场景把一个同步方法改成异步方法。假设我有一个老的同步方法public Order GetOrder(Guid id)希望改成public async TaskOrder GetOrderAsync(Guid id, CancellationToken ct)并更新所有调用方。如果只靠 Copilot它可能只会帮你改当前文件其他调用方还是报错。如果只靠 CodeRush它能快速改名和改引用但方法体内的异步逻辑还是要自己写。接入后的体验是先让 CodeRush 执行改名操作比如把方法名改成GetOrderAsync它会自动更新所有引用位置再让 Copilot 基于新的签名修改方法体补充await和CancellationToken参数传递最后让 CodeRush 的 Code Issues 扫描整个解决方案确认没有遗漏的调用方。三个动作串起来一个原本需要手动改五六个文件的重构变成几分钟内完成的操作。这个过程中最核心的体验是AI 负责“写”结构工具负责“改全”二者缺一不可。5.3 大文件下的实际体感最后说一个我自己特别在意的问题大文件下两个工具的表现。我在一个老项目里试过一个四千行的控制器文件里面全是历史遗留代码。这种文件里 Copilot 经常出现两种情况一是建议内容因为上下文太长而变慢二是建议的代码参考了文件很靠前的内容但屏幕上看不到容易出错。这时候 CodeRush 的局部结构能力就特别有用。我可以用 CodeRush 的“块选择”和“折叠”功能把大文件拆成小块选中其中一个方法再在选中区域里调用 Copilot 让它解释或重写。这种“先缩小上下文再让 AI 介入”的用法在大文件里几乎是必备技巧。另外我还发现一个有意思的细节CodeRush 的代码导航在 Copilot 多行建议的接受过程中非常顺手。Copilot 有时候建议的是一个完整的属性块接收之后如果发现这个属性名重名了CodeRush 的 Code Issues 会立刻报错。如果是以前我可能要编译一次才能发现现在几乎是实时反馈。这种“AI 生成、结构工具即时校验”的组合体验上的提升是实打实的。6. 常见问题与避坑指南无论配置多顺利实际用起来总会遇到各种问题。我把自己在这段时间里遇到的、以及同事反馈过的典型问题整理出来方便大家排查。6.1 Copilot 入口不显示或者无响应这是接入后最常遇到的问题。右键菜单里没有“Ask Copilot”“Fix with Copilot”一般有三个原因。第一CodeRush 的 AI 集成选项没有打开或者是旧版本没有这个功能入口检查工具 - 选项 - CodeRush - AI Services确认启用。第二GitHub Copilot 扩展没有登录打开扩展管理看状态如果显示需要登录先完成登录再重启 VS。第三用户界面语言或者版本差异导致菜单名称不同v26.1.5 里是“Ask Copilot”较早版本可能是“Ask AI”按功能描述找就行。还有一种比较隐蔽的情况如果电脑上同时装了其他 AI 助手扩展比如某些代码补全类的插件可能会抢占 Copilot 的补全触发接口导致 CodeRush 里的入口虽然存在但点击后无响应。排查方法是禁用其他 AI 相关扩展单独启用 Copilot 和 CodeRush重启 VS 再试。6.2 快捷键冲突怎么办CodeRush 和 Visual Studio 默认快捷键本来就多接入了 Copilot 之后AI 操作也要占用快捷键冲突的概率直线上升。最常冲突的是 Ctrl. 和 AltEnterVisual Studio 自己的快速操作和 CodeRush 的智能标记都会用这两个键。我的处理方式是在“工具” - “选项” - “CodeRush” - “Keyboard Mapping”里找到和 AI 操作相关的绑定改成我自己习惯的组合比如 CtrlAltA。另外Copilot Chat 自己的快捷键 CtrlAltI 也可能和某些 CodeRush 命令冲突这个在 Visual Studio 的键盘映射设置里能统一修改。修改快捷键的思路有个原则把频繁使用的操作绑定到最顺手的键位不常用的别占好位置。我自己的习惯是跳转用 CtrlShiftQ这个保持默认AI 对话用 CtrlAltA这个是我自定义的快速操作保持 AltEnter。调整完之后日常操作里几乎没有撞车的情况。6.3 性能下降与上下文踩坑接入 AI 之后性能问题是绕不开的话题。CodeRush 本身有一个持续运行的分析引擎Copilot 又会在后台保持一个上下文窗口两者叠加之后如果项目特别大内存占用和 CPU 占用可能有明显上升。我在一个大型解决方案里实测过同时打开 Code Issues 和 Copilot 自动补全内存占用比只开 CodeRush 时高出大约 300 到 500 兆。对 16G 内存的开发机来说还能接受但如果你用的是 8G 内存的老机器建议在有明确需求时再打开 AI 集成平时可以在 CodeRush 选项里暂时禁用。上下文踩坑则更隐蔽。Copilot 生成建议的质量高度依赖它看到的上下文长度。在超大文件里自动补全的准确率会下降我自己的经验是超过一千行的方法体Copilot 的建议质量明显变差。解决办法之一是借助 CodeRush 的“临时停用代码分析”或块选择功能先把要处理的代码段隔离出来再让 Copilot 在这个局部上下文里工作。这比在完整文件里让 AI 自由发挥要靠谱得多。6.4 常见问题速查表问题现象可能原因解决方式右键无 AI 菜单集成未启用或版本过旧检查 CodeRush 版本和 AI Services 选项Copilot 建议不出现账号未登录或扩展冲突完成 Copilot 登录禁用其他 AI 扩展CodeRush 选项显示未连接授权未同步打开 Copilot Chat 触发一次完整认证修改后产生大量新错误Copilot 建议与项目结构不符用 CodeRush 查找引用确认影响面后再决定内存占用过高两个工具同时全量分析关闭部分 CodeRush 诊断或在选项里暂停 AI 服务快捷键互相干扰默认键位重合在键盘映射里自定义 AI 操作绑定的快捷键还有一个很实际的问题要提醒一下代码合规和隐私。如果公司有严格的数据外发管控使用任何 AI 编程助手前都应该和团队确认策略。CodeRush 接入 Copilot 后右键操作会发送当前文件的相关上下文到 Copilot 服务端。虽然 Copilot 对发送内容的范围和用途有官方说明但企业场景下敏感代码还是建议手动脱敏后再交给 AI 分析或者直接关闭代码相关的 AI 入口只用本地诊断。用到现在我个人最深的体会是CodeRush v26.1.5 接入 GitHub Copilot不是把两个工具的按钮拼在一起而是把 AI 的灵活性和结构化工具的严谨性凑到了一起。CodeRush 帮 AI 补上了对项目结构理解不足的短板AI 则帮 CodeRush 突破了模板化生成的局限。最后给一个实用的建议刚上手时别贪多先把右键菜单和 Code Issues 里的两个 AI 入口用起来等习惯了这种“AI 提议、结构工具兜底”的节奏再慢慢打开其他入口。你会发现真正的提效不是来自某一个 AI 功能而是来自整套开发流被重新理顺。
返回列表