GitHub称Copilot CLI的C++语言服务器现可自动配置MSBuild项目,但仓库指南(最后修改于10月21日)仍说这是在Windows上、默认关闭、按功能标志启用、只在启动时运行的实验
2026年11月10日,GitHub在更新日志中说,面向Copilot CLI的Microsoft C++ Language Server现在内置MSBuild编译命令提取器,并在打开项目、启动服务器时自动调用,代理不再需要先找到并运行设置技能;GitHub说生成过程是确定性的,可减少设置所用的token,但没有给出数字。仓库的指南最后修改于10月21日,它说自动MSBuild配置默认关闭、按功能标志启用、针对Windows、只在启动时运行;README也仍让MSBuild用户运行该技能。来源没有说明哪一份是现状。每个用户的state.json设置可以关闭它或设置超时。CMake和其他构建仍需自备compile_commands.json或用技能生成。该服务器处于预览阶段,需要Copilot订阅,不支持重命名、格式化和文本文档同步。
2026年11月10日,GitHub在更新日志中宣布,面向GitHub Copilot CLI的Microsoft C++ Language Server现在内置了MSBuild编译命令提取器,并会自动调用它。按这篇文章的说法,代理不再需要先找到并运行一个单独的配置技能,才能为基于MSBuild的C++项目取得精确的代码智能。本文依据这篇更新日志,以及microsoft/cpp-language-server仓库中的三页内容:README、生成编译命令的指南、支持的LSP功能表。本文没有安装插件,没有打开项目,也没有运行提取器。本文也没有查看文章里的图片、文章链接的7月2日那篇较早的更新日志,以及其他链接的文档页面。
文章说明了原来的做法和这次的变化。过去,要为基于MSBuild的C++项目使用转到定义、查找引用等语言服务器功能,需要二者之一:自己提供compile_commands.json文件,或者由Copilot找到并运行一个配置技能来生成编译数据库。GitHub说,这个额外的发现步骤增加了设置时间,并在Copilot开始处理代码之前就消耗了token。文章列出三项变化。编译命令提取器直接随语言服务器打包,因此始终可用。Copilot在打开项目、启动语言服务器时调用提取器,不需要手动操作,也不需要代理运行设置技能。MSBuild项目的编译数据库生成是确定性的,GitHub说这减少了设置所用的token。文章没有给出节省多少时间或token的数字,所以这些好处是GitHub自己的描述,不是测量结果。
仓库的指南解释了这个文件为什么重要。语言服务器用compile_commands.json文件了解项目中每个翻译单元是怎样构建的。编译器选项、包含路径和预处理器定义都会影响服务器如何解读源文件。指南说,这个编译数据库提供了准确的转到定义、查找引用和其他语义代码智能所需的构建上下文。它举的例子是:当你让Copilot找到某个函数的定义或找出它的调用方时,语言服务器用这些构建上下文来解析符号之间的关系。
指南描述的自动路径带有更新日志没有提到的条件。在指南的MSBuild一节,有一条注释说,自动MSBuild配置默认是关闭的,只有通过功能标志为你启用了这个实验时才可用。同一节把它放在Windows上描述:实验启用后,当需要生成compile_commands.json时,语言服务器会在启动时运行内置的提取器。README的快速开始也仍然告诉CMake或MSBuild(vcxproj)项目的用户去运行generate-compile-commands技能。仓库页面显示,指南最近一次提交在2026年10月21日,README在2026年11月3日,都早于11月10日的文章。来源没有说明,是文章意味着这个实验现在已对所有人开启,还是指南已经过时,本文不作判定。来源也没有说明用户怎样查看这个实验是否已为自己启用。
指南还写明了自动路径不做什么。它在启动时运行,不会在CLI会话期间响应项目的变化。如果项目在会话中发生变化,指南说要用Copilot CLI技能重新生成compile_commands.json。指南说,检测这类变化的文件系统监视计划在以后的更新中加入,但没有给出时间。
按照指南,有两项设置控制自动提取。它们放在Windows上每个用户的state.json文件里,路径是%LOCALAPPDATA%\mscppls\state.json。这些设置对该用户的所有仓库生效,不应写进项目的cpp-lsp.json,也不应写进Copilot CLI的lsp.json。步骤是:关闭正在使用C++语言服务器的Copilot CLI会话,在文件中添加或更新这些属性并保留其他所有属性,然后重启Copilot CLI。把auto_generate_compile_commands_for_msbuild设为false会关闭自动提取。设为true会重新开启,但不能绕过功能标志,实验本身也必须已为你启用。msbuild_extractor_timeout_seconds以秒为单位设置超时,只在自动提取开启时生效,指南的例子用的是120。修改在下一次语言服务器启动时生效。指南还提醒,这个状态文件也可能含有身份验证数据和其他用户设置,所以不要只用示例内容替换已有文件,不要把它提交到仓库,也不要附到公开的issue里。
文章说,其他构建系统仍然需要你自己提供compile_commands.json,或用一个技能来生成。对CMake,文章指向较早版本推出的生成编译命令技能,方法是让Copilot CLI“load project”。指南补充说,使用Ninja或Makefile生成器的CMake项目,可以在配置命令中加上-DCMAKE_EXPORT_COMPILE_COMMANDS=ON来生成这个文件;通常使用其他生成器的项目,应先看看能否临时用Ninja或Makefile配置一次。对没有启用实验或关闭了自动提取的MSBuild用户,指南指向那个技能或一个示例应用程序,并说这个示例在复杂项目中可能需要调整。对自定义构建,指南建议把生成步骤保存为项目专用的技能,让过程可以重复,并以setup-cpp-language-server技能作为起始模板。
README说明了怎样开始。它说这个语言服务器目前处于预览阶段,以后的版本可能会变化,并说它把Visual Studio和VS Code所用的同一套C++代码智能带到Windows、macOS和Linux上的GitHub Copilot CLI。前提条件是:有效的GitHub Copilot订阅、支持会话目录的GitHub Copilot CLI(用预发布版1.0.106-5测试过),以及npm。快速开始有六步:在Copilot CLI里运行/plugin install cpp-language-server@copilot-plugins安装插件,它会打包语言服务器并自动更新;运行npx @microsoft/cpp-language-server --accept-eula --login,接受许可条款并登录GitHub;为项目创建compile_commands.json文件;从项目目录启动Copilot CLI;运行/lsp show,应能看到一个“cpp”服务器在运行;然后照常使用Copilot CLI。README建议在提示里加上“use LSP tools”这样的短语,促使代理使用这些工具。
仓库的功能表列出了服务器会响应哪些请求。支持的有:悬停提示、补全、签名帮助、转到定义、转到声明、转到类型定义、查找引用、文档符号、工作区符号、调用层次、折叠范围、拉取诊断和工作区文件夹。不支持的有:重命名、代码操作、代码镜头、文档高亮,以及文档格式化、范围格式化和输入时格式化。文本文档同步也不支持。表中的注释说,AI代理应在调用LSP操作之前把文件更新到磁盘上。本文对这张表的理解是:服务器不会重命名符号,也看不到尚未写到磁盘上的修改。
关于数据和适用范围,README说,该软件可能收集关于你以及你使用软件情况的信息并发送给Microsoft,遥测可以按仓库中的说明关闭;它链接到一个命令行选项页面,本文没有阅读。文章说需要有效的GitHub Copilot订阅。来源支持的是一个窄的结论。11月10日,GitHub描述了Copilot CLI中C++语言服务器的自动MSBuild设置。而仓库自己的指南最后修改于这一天之前,把同一功能描述为在Windows上、默认关闭的实验。没有任何来源给出设置时间或token用量的测量。
Sources
FAQ
C++语言服务器现在会自动配置MSBuild项目吗?
GitHub在11月10日的文章说,内置提取器会在打开项目时自动运行。仓库指南最后修改于10月21日,却说它是在Windows上、默认关闭、按功能标志启用的实验。来源没有说明哪一份是现状,也没说怎样查看自己是否已启用。
怎样关闭自动MSBuild提取或修改它的超时?
按仓库指南,在Windows上编辑每个用户的state.json,并保留其他属性:把自动生成开关设为false即可关闭;超时设置只在自动提取开启时生效。改后重启Copilot CLI。该文件可能含有身份验证数据,不要提交到仓库或公开。
这个语言服务器不支持哪些LSP功能?
仓库的功能表列出重命名、代码操作、代码镜头、文档高亮,以及文档、范围和输入时格式化都不支持。文本文档同步也不支持,表中说代理应先把文件更新到磁盘再调用LSP操作。悬停提示、补全、转到定义、查找引用和调用层次是支持的。