先说一个可能让不少人意外的结论:Visual Studio 2017 到了今天,远远没有被淘汰。上个月帮朋友复现一个 2013 年前后写的 .NET Framework 项目,代码本身能编译,但用新版本 IDE 打开后,第三方控件库的引用路径、项目文件的工具集版本、甚至部分 C++ 工程的平台工具集都对不上,报错一路飘红。折腾半天,最后是老老实实装回 Visual Studio 2017 才把整个链路跑通。
这种情况在维护老系统、接手上任开发者留下的代码、给学校课程做实验环境、或者跑一些只兼容旧 SDK 的 Unity 工程时,几乎天天遇到。所以这篇内容就是围绕Visual Studio 2017 下载地址和安装教程展开,把下载渠道的选择、安装向导里每一个需要勾选的页面、路径规划、以及装完之后最容易踩的几个坑,完整地讲一遍。文中不涉及任何非常规的获取方式,全部走正常渠道。不管你是第一次装 IDE 的新手,还是只想快速搭一套遗留项目环境的老手,都能照着走完。
1. 先把定位搞清楚:什么情况下还值得装 Visual Studio 2017
动手下载之前,我建议先花两分钟想清楚一件事:你到底为什么要装 2017,而不是 2022。这一步想不清楚,后面很可能白装一遍。
1.1 三类真正需要它的场景
第一类是遗留项目维护。很多企业的内部系统、工控上位机软件、老版校园管理系统,都是 .NET Framework 4.0 到 4.6 时代写出来的。项目文件里写死了ToolsVersion,引用的第三方 DLL 依赖特定版本的 MSBuild 行为,某些 WinForms 设计器在新 IDE 里的渲染逻辑也变了。你用新版打开,可能连窗体设计器都加载不出来。这种情况下装回 2017 是最省事的方案,而不是花几天时间去改项目文件。
第二类是教学和考证环境。不少学校的实验指导书、培训机构的课件、以及一些厂商的认证考试,环境要求就是某个固定大版本。跟着课件走能少踩很多坑,环境不一致带来的问题往往会被误判成"代码写错了",白白浪费时间。
第三类是 SDK 与工具链的硬约束。比如某类设备厂商的驱动开发包只提供 VS2017 的集成插件,只支持到 VS2017 的向导版本;又比如一些老版本的 Unity,官方文档明确写着推荐用 VS2017 作为外部脚本编辑器。这类情况下你不是在选 IDE,你是在满足上游工具的要求。
提示:如果你的项目本身是新建的、没有历史包袱,那没什么好犹豫的,直接上当前主流版本。装 2017 只应该发生在"被历史代码或上游工具绑住"的前提下。
1.2 和 VS2022、VS Code 的横向取舍
经常看到有人把这几样东西混为一谈,我在这里一次说清楚,避免你选错工具白折腾。
| 工具 | 定位 | 适合的场景 | 不适合的场景 |
|---|---|---|---|
| Visual Studio 2017(Community/Professional/Enterprise) | 完整功能 IDE,Windows 平台为主 | .NET Framework 遗留项目、C++ 桌面、UWP、老版 Xamarin | 只写前端脚本、轻量改配置 |
| Visual Studio 2022 | 同上,新一代 | 新项目、.NET 6/8、现代 C++ | 严格锁定旧工具集的遗留工程 |
| VS Code | 轻量编辑器加插件生态 | 前端、脚本、跨语言快速编辑、远程开发 | 需要可视化设计器、复杂调试的大型工程 |
一句话概括:VS Code 是"编辑器加插件",Visual Studio 是"工程化 IDE 加编译器加调试器加设计器"。装 VS Code 再装一堆插件去凑一个 WinForms 设计器,是典型的用错工具。
1.3 三个版本(Community/Professional/Enterprise)怎么选
Visual Studio 2017 的官方分发有三个主要版本,功能是层层叠加的:
- Community(社区版):面向个人开发者、学生、开源项目参与者,功能上已经包含了绝大部分日常开发需要的内容,包括完整的调试器、代码分析、单元测试和 Git 集成。个人使用选它就行。
- Professional(专业版):在社区版基础上增加了面向团队协作的部分能力,通常通过订阅获得。
- Enterprise(企业版):包含更完整的代码质量分析、架构验证、IntelliTrace 全时段调试等能力,同样是订阅制。
社区版的功能边界,在个人使用场景下基本够用,而且它是正正经经的免费版本,不是试用版。安装向导里选版本这一步是可以随时反悔的——后面装了想升级,用安装程序改一下就行,不用重装整个环境。
注意:不要在非官方渠道下载所谓的"免安装版""绿色版",这类打包版本通常会剥离安装程序的组件注册过程,导致后续想增删工作负载时直接报错,而且来源无法验证。IDE 这种东西装的是编译器和调试器,来源必须干净。
2. 下载:引导程序、离线布局包该怎么挑
下载这一步看着简单,其实是整篇安装教程里最影响后续体验的决策点。选错了,后面可能要反复下载好几遍。
2.1 从官方页面找到 2017 的归档入口
Visual Studio 2017 早已过了官方支持周期,官方支持在 2023 年就已经结束,所以它不在下载页最显眼的位置,而是被收纳进了"旧版本下载"区域。正常路径是:进入 Visual Studio 官方站点的下载页面,在页面下方或侧边找到"以前的版本""老版本"这一类入口,进去之后就能看到 2017 的分支,再往下按版本号细分到具体的更新版本。
这里有个细节值得说:2017 有非常多的更新版本,从最初的 15.0 一路到后期的 15.9.x。同一个大版本内的更新是累积的,直接用该分支里最新的那个更新版本即可,不要去找 15.0 的初版,那里面的一些工具链问题在后续更新里已经修掉了。
2.2 引导程序 vs 离线布局:一动一静两条路
官方在 2017 这一代提供了两种下载形态,很多人分不清区别。
引导程序是一个几 MB 的小体积可执行文件(比如vs_community.exe),它本身不含任何组件,运行时再去服务器上按需拉取。优点是体积小、随时能拿到最新组件;缺点是把整台机器的网络状况押在了安装过程上,一旦中途网络抖动,就可能卡住或者失败。
**离线布局(Layout)**是用引导程序加命令行参数,把指定工作负载的全部安装包提前下载到本地某个目录。之后安装时直接从本地方向取包,全程不需要联网。缺点是要占几个 GB 到几十 GB 的磁盘,而且下载一次要等挺久。
ISO 镜像是第三条路。2017 这一代官方确实提供过 ISO 形式的安装介质,适合完全断网的环境。但要注意,ISO 里通常只包含核心组件,如果你需要某些特定的工作负载或者更新的工具集,还是要联网补齐或者用离线布局的方式补下载。所以 ISO 更适合"先把最小环境装上,细节后面慢慢补"的场景。
三种方式怎么选,可以直接对号入座:
| 场景 | 推荐方式 | 理由 |
|---|---|---|
| 自己的开发机,网络顺畅 | 引导程序在线安装 | 体积小,能拿到最新组件 |
| 内网机器、多人共用环境 | 离线布局 | 装一次,后续所有机器复用 |
| 完全离线、需要快速铺开 | ISO 加离线布局补齐 | ISO 起底,缺失部分单独补 |
| 需要固定版本做长期维护 | 离线布局加归档保存 | 版本可控,不怕以后下载源变化 |
2.3 用命令行拉一份完整离线布局
离线布局的做法是在命令行里调引导程序,指定下载目录、语言和需要的工作负载。举个实际例子,假设要把 .NET 桌面开发和 ASP.NET Web 开发两个方向拉到 D 盘的布局目录:
vs_community.exe --layout D:\VS2017Layout --lang zh-CN --add Microsoft.VisualStudio.Workload.ManagedDesktop --add Microsoft.VisualStudio.Workload.NetWeb --includeRecommended参数的含义逐个拆一下:
| 参数 | 作用 | 经验值 |
|---|---|---|
--layout <目录> | 指定布局包落地目录 | 放在非系统盘,留足 30GB 以上 |
--lang | 指定语言包 | zh-CN中文界面,多人环境建议加en-US |
--add | 添加工作负载或单个组件 ID | 按需添加,ID 要写完整 |
--includeRecommended | 同时拉取该负载的推荐组件 | 强烈建议加,否则装完少东西 |
--includeOptional | 连可选组件一起拉 | 会让体积明显变大,按需 |
--all | 拉取全部工作负载 | 体积非常大,一般不建议 |
几个容易忽略的点。第一,--lang可以重复指定多个,写法是--lang zh-CN en-US,这样布局包里会同时带中英文资源,切换界面语言时不用再联网。第二,--includeRecommended这句一定要加,不加的话某些负载的核心组件不会被拉下来,安装时会提示缺少包,还得再跑一遍。第三,布局目录不要放在中文路径或者带空格的路径下,个别情况下命令行解析会出问题,用D:\VS2017Layout这种纯英文短路径最省心。
如果只是想拉"所有工作负载的推荐组件",可以用--allWorkloads --includeRecommended,这个组合比--all温和一些,体积也可控得多。
2.4 下载完怎么验证文件没坏
下载动辄几个 GB,中途出错是最常见的情况之一。验证方法有两层。
第一层是看体积和文件数是否合理。布局目录下载完之后,里面应该有一个引导程序副本、一个packages目录(装着所有实际安装包)、一个certificates目录(装着签名证书)。如果packages里的文件数明显偏少,或者有多个 0 字节文件,那就是没下完,重跑一次下载命令即可,引导程序本身支持断点续传,不会从头再来。
第二层是算哈希。如果你下载的是 ISO 镜像,官方会在页面或者配套文件里给出对应的哈希值,用系统自带的命令就能算:
certutil -hashfile D:\VS2017.iso SHA256把输出的字符串和官方公布的值对着看,一致就说明文件在传输过程中没有损坏。这一步在处理大文件时真的别省,我见过一次因为镜像下载不完整,安装到 80% 报包损坏,然后重新下载,前后浪费了两个多小时。
3. 装之前的环境自查:几件小事能省掉一半返工
安装 Visual Studio 2017 出问题的案例里,相当一部分根本不是安装程序的问题,而是环境本身没准备好。这几项在点"安装"之前花五分钟检查一下,性价比很高。
3.1 操作系统与硬件的硬门槛
2017 这一代对系统的要求比现在的新版本宽松得多,这也是它在老机器上还能用的原因。大致门槛是这样的:
| 项目 | 最低要求 | 实际建议 |
|---|---|---|
| 操作系统 | Windows 7 SP1 / 8.1 / 10 / Server 2012 R2 及以上 | Windows 10 64 位最省心 |
| 处理器 | 1.8 GHz 及以上,双核起步 | 四核以上,编译体验差距明显 |
| 内存 | 2 GB | 8 GB 起步,16 GB 才谈得上顺畅 |
| 磁盘空间 | 视组件而定,最大可达上百 GB | 系统盘留 30 GB 以上,组件另放 |
| 显卡 | 支持 1280×720 分辨率 | 1080P,多显示器更舒服 |
如果你打算在虚拟机上装,内存至少给到 8 GB,处理器核心给到 2 个以上,并且开启虚拟化支持。我在 4 GB 内存的虚拟机上装过一次,光是安装过程就比正常机器慢了三倍,装完之后打开一个中等规模的解决方案要等好几分钟,体验很差。
还有一个特别容易被忽略的点:Windows 7 环境需要先装好相关的系统更新补丁。老系统上缺少某些加密协议相关的更新时,安装程序连接下载服务器会直接失败,报出一堆看不懂的错误码。如果你必须用 Windows 7,先把系统更新打到比较新的状态再动手。
3.2 三个路径的规划(程序、缓存、共享组件)
Visual Studio 2017 相比更早的版本,最大的改进之一就是允许自定义安装位置了。它把磁盘占用分成三块,理解这三块的分工,能帮你省下系统盘的空间。
- 安装目录:IDE 主体,比如默认会落在
Program Files (x86)下的对应版本目录里。这是程序本体,不建议乱动,但要占 10 GB 以上。 - 下载缓存目录:安装过程中拉下来的原始安装包会留在这里,默认在系统盘的
ProgramData下。它的体积往往和安装目录差不多,是系统盘空间被吃掉的元凶。 - 共享组件目录:一些被多个版本共用的运行库、构建工具会放在这里,装机时如果机器上已经有别的 Visual Studio 版本,它会自动复用。
我的实际做法是:系统盘只留给安装目录,缓存目录和共享组件目录全部指到数据盘。这样系统盘占用可控,以后要清理缓存也方便,直接整个目录删掉就行,不影响 IDE 运行。唯一的代价是要提前在数据盘上建好空目录,安装向导里路径选择那一页要手动改。
注意:路径一旦确定,安装完成后虽然可以通过安装程序改,但过程比较慢,而且有失败风险。所以这一步最好一次规划到位,别装到一半再改。
3.3 安装前必须处理掉的软件与设置
有几类东西会直接干扰安装过程,装之前先处理掉。
杀毒软件的实时防护。这个是最常见的原因。VS 安装过程会往磁盘写入几万个文件,实时扫描会把这些写入拖慢好几倍,更严重的是可能把某些安装包当成可疑文件锁住,导致某个包安装失败。建议安装期间临时关掉实时防护,装完再打开。这个操作只是临时关闭,装完记得恢复。
正在运行的其他安装程序。Windows 的安装服务同一时间只能处理一个,如果后台有 Windows Update 正在装补丁,或者有其他 MSI 安装任务在跑,VS 安装程序会直接卡住并提示等待。装之前看一眼任务管理器,把系统更新等一等。
占用系统盘的大量临时文件。安装过程会在临时目录里解压大量文件,如果系统盘空间本来就很紧张,建议先清理一下临时目录。这个操作很安全,临时文件本来就是用完即弃的。
已经装过的旧版本残留。如果之前装过同版本但卸载不干净,安装程序可能会误判为已安装。这种情况先打开安装程序,确认列表里没有残留条目再开始。
4. 图解安装全过程:每一步该看什么、该勾什么
准备工作做完,正式进入安装环节。下面按安装向导的页面顺序走一遍,把每一步的界面特征和该做的选择都说清楚。
4.1 启动引导程序到工作负载页
双击下载好的引导程序,最先看到的是一个深色背景的启动界面,中间是产品名称和版本信息。这个界面会短暂停留,它在做的是检查系统环境、准备安装引擎。这一步卡住是很常见的现象,尤其是第一次运行时,它会去下载安装引擎自身,网络不好就会停在这里很久。如果超过十几分钟没有任何变化,再去排查网络或者改用离线布局。
引擎准备好之后,界面会跳到一个带几个标签页的窗口。2017 的安装向导是竖排标签的形式,从上到下依次是"工作负载""单个组件""语言包""安装位置"。工作负载页是默认打开的第一个页面,也是最关键的页面。
这个页面的设计逻辑是"按开发方向打包":它把需要一起装的组件预先组合成一个组,你勾一个方向,它就帮你把编译器、SDK、模板、调试支持一起装上。这种方式比早期版本那种长长的复选框列表友好太多了,但也带来一个问题——默认勾选项会占很大空间,需要你根据实际情况做减法。
4.2 工作负载按职业方向勾选的三套组合
工作负载列表里有十几个类目,全勾上能占掉一百多 GB。我按常见的三排职业方向给出三套组合,你可以直接照着选。
组合一:.NET 桌面与后端开发(最常见)
勾选".NET 桌面开发"和"ASP.NET 和 Web 开发"两项。这两项覆盖了 WinForms、WPF、控制台程序,以及 Web API、MVC 这一整套技术栈。对于大多数做企业级应用的场景,这两个就够了。注意 Web 开发那一项默认会带上 IIS Express 和数据库相关的工具,如果只是做后端接口开发,这些是必要的。
组合二:C++ 与底层开发
勾选"使用 C++ 的桌面开发"。它会带上 MSVC 编译器、Windows SDK、CMake 支持、以及调试工具。如果你要开发工控、驱动外围、算法模块这类内容,这个是核心。特别提醒:这一项历史版本里会同时带上多个版本的 Windows SDK,如果你明确知道需要哪个版本,可以在单个组件页里做精简。
组合三:跨平台与脚本辅助
勾选"Python 开发"或者"Node.js 开发"。2017 对 Python 的支持已经相当完整了,有虚拟环境管理、调试器、包管理界面。如果只是想用 IDE 的调试器来调 Python 项目,这个组合比单独配环境省事很多。
如果实在拿不准,一个保守策略是:先只勾你最确定要用的那一项,装完再用安装程序补。增删工作负载不需要重新下载整个 IDE,只是拉取新增组件,比一次装错再卸载重来划算得多。
4.3 单个组件、语言包与"可选"的取舍
"单个组件"标签页是把工作负载拆开的最小单位,里面按分类罗列了几百个条目。绝大多数情况下不需要手动改,但有几个值得单独拎出来。
- NuGet 包管理器:检查一下有没有被勾上,这个是必需品,没有它连第三方库都装不了。
- Git for Windows:如果机器上没装 Git,建议在这里一起装上,省得后面单独配置。
- 各个版本的 .NET Framework 目标包:如果你要开发和旧版框架匹配的程序,注意把对应的目标包勾上。目标包不全,新建项目时下拉框里找不到对应的框架版本。
- MSBuild 与编译器工具集:C++ 项目尤其要注意,多个工具集版本可以共存,老项目往往需要指定旧的工具集。
"语言包"页面很简单,默认会勾当前系统语言。我的建议是同时勾上中文和英文。原因有两个:一是遇到报错时,用英文关键词去搜索,能命中的资料多得多;二是部分第三方扩展的中文界面翻译得很别扭,切回英文反而看得懂。语言包是可以在 IDE 里随时切换的,不用重装。
4.4 安装位置页:三个路径的具体填法
这个页面就是前面提到的三块磁盘规划落地的地方。三个输入框分别是安装目录、下载缓存目录、共享组件目录。
我的填法是:
安装目录: C:\Program Files (x86)\Microsoft Visual Studio\2017\Community 下载缓存目录: D:\VS2017Cache 共享组件目录: D:\VS2017Shared需要注意的是,安装目录和共享组件目录必须放在同一个盘符,否则安装程序会直接给一个警告。这是因为安装程序需要在两者之间建立硬链接来复用文件,跨盘符做不到。所以如果你的系统盘空间实在紧张,就整体挪到数据盘,但保持一致。
提示:填完之后看一下页面下方给出的"需要的磁盘空间"估算值。它会随着你在前几个页面勾选内容的变化实时更新。如果这个数字超过了你目标分区的可用空间,别抱侥幸心理,回去减工作负载。
4.5 安装进度条背后的动作与重启
点下"安装"之后,会进入一个长时间的进度页面。进度条分为若干阶段,每个阶段下面有小字提示当前在做什么,比如"正在应用""正在安装组件""正在配置"。这个过程可能持续二十分钟到两个小时,取决于你勾了多少东西和磁盘速度。
几点经验。进度条长时间停在同一百分比是正常现象,尤其是在安装大体积组件时,它可能在解压或者注册。判断是否真的卡死,看的不只是进度条,还要看任务管理器里安装进程的磁盘读写和 CPU 占用,只要有活动就是在干活。不要在这个阶段手动结束进程,中断安装留下的半成品状态清理起来很麻烦。
另外,安装过程中如果提示需要重启,那通常是它在装运行库或者更新系统组件。可以按提示重启,重启后安装程序一般会自动继续。
5. 首次启动与基础配置:让 IDE 立刻顺手
安装完成后的首次启动,有几个步骤值得认真做一遍,能把以后的使用体验拉开差距。
5.1 登录、主题、字体与起始页
第一次启动会走一个初始化向导,让你选开发设置和配色主题。开发设置那个下拉框里有"常规""Visual C#""Visual C++""Web 开发"等选项,它决定的是默认的快捷键方案和窗口布局。这一项后续可以改,所以不用纠结,选一个和你主用语言最接近的即可。
接着会提示登录 Microsoft 账号。社区版同样需要登录才能长期使用,登录之后会自动完成授权。这一步建议直接登录,跳过的话每次启动都会有提示,比较烦。
主题方面,深色和浅色完全看个人习惯,没有优劣。但我强烈建议在这个环节就把字体调好:默认的 Consolas 配上 10 号字,在高分辨率屏幕上偏小,眼睛容易累。换成等宽字体加 12 号以上,再打开"使用连字"选项,长时间看代码舒服很多。
5.2 新建项目跑通第一条编译链路
装完之后第一件正事,是新建一个最小项目把"编写—编译—运行—调试"这条链路完整走一遍。这一步的目的不是写代码,而是验证工具链是否完整。
具体做法:新建项目,选控制台应用,框架选 .NET Framework 4.6 或者你实际需要的版本,生成位置建议放在一个纯英文路径下。然后在主函数里加一行输出,按 F5 运行。如果能看到控制台窗口弹出并打印结果,说明编译器、运行时、调试器三者都是通的。
这个验证很有必要,因为安装过程中如果某个组件包悄悄失败了,安装程序在最后可能只给一个笼统的提示,你当时未必注意到。等到真正开始写项目时才报错,排查成本高得多。
再补一个 C++ 的验证方式:新建一个空的 C++ 控制台项目,写个最简单的输出语句,按 F7 编译。如果编译报"找不到 Windows SDK"之类的错误,说明 SDK 组件没装上,回安装程序补一下即可。
5.3 快捷键速查与"Start Experimental Instance"到底是什么
装完之后,开始菜单里会比预期多出好几个快捷方式,其中一个名字很特别,叫"Start Experimental Instance of Visual Studio 2017"。很多人第一次看到都会疑惑这是不是装错了。
它其实是一个专门给扩展开发者用的独立实例。启动它之后,IDE 会用一个单独的配置分支运行,注册表配置、设置文件、扩展列表全都是独立的,不会污染你日常使用的那个主实例。它的作用是让扩展开发者在调试自己写的插件时,不用把主环境搞乱——比如你正在开发一个自定义编辑器,需要频繁重载,用实验实例就完全不用担心。副作用是首次启动这个实例会比较慢,因为它要从零初始化一套配置。
如果你不做扩展开发,这个快捷方式可以放着不管,它不影响正常使用。真觉得碍眼,删掉快捷方式本身也不会破坏任何东西。
日常开发中用得最多的快捷键,我整理了一份自己高频使用的:
| 快捷键 | 作用 | 使用频率 |
|---|---|---|
Ctrl+K, Ctrl+D | 格式化当前文档代码 | 极高 |
Ctrl+K, Ctrl+C | 注释选中行 | 极高 |
Ctrl+K, Ctrl+U | 取消注释 | 极高 |
F5/Ctrl+F5 | 调试运行 / 不调试运行 | 极高 |
Ctrl+Shift+B | 生成解决方案 | 高 |
Ctrl+, | 打开设置页 | 高 |
Ctrl+Q | 全局搜索功能 | 高 |
Ctrl+T | 跳转到文件或类型 | 高 |
F12 | 转到定义 | 极高 |
Ctrl+Shift+F | 在整个解决方案中查找 | 中 |
Ctrl+K, Ctrl+D这个组合值得单独说一句:它是两个连续按键,先按Ctrl+K松开,再按Ctrl+D。很多新手按不出来就是因为两个键一起按了。
5.4 NuGet 源与扩展管理
NuGet 是 .NET 生态的包管理器,Visual Studio 里内置了图形界面。默认的官方源在国内访问有时会比较慢,如果遇到还原包超时,可以加一个国内的公开镜像源,速度会明显改善。
具体做法是在"工具—选项—NuGet 包管理器—程序包源"里添加一个新的源地址,指向公开的镜像服务,然后在还原包时优先使用它。这里不建议直接删掉官方源,因为镜像同步有延迟,最新的包可能还没有。
扩展管理方面,VS2017 的"扩展和更新"入口可以浏览、安装、禁用扩展。几条经验:不要一次装太多扩展,每个扩展都会拖慢启动速度,尤其是那些挂到编辑器事件上的扩展;装之前看一下版本兼容性标注,给更高版本 IDE 做的扩展在 2017 上可能加载失败,失败后 IDE 启动会变慢;遇到启动异常时,可以用安全模式启动(命令行加/SafeMode参数),它会跳过所有扩展加载,用来判断是不是扩展引起的。
6. 安装失败的完整排查链路:从卡住到报错代码
这一节是这篇文章最实用的部分。安装 Visual Studio 出问题的形式就那么几种,但每一种背后对应的原因不同,盲目重试只会浪费时间。下面按"症状到原因"的顺序,把排查链路完整走一遍。
6.1 卡在"正在准备"或进度长时间不动
症状:安装程序启动后停在初始界面,或者进度条卡在某个百分比很久,没有任何移动。
第一步要区分是真卡还是慢。打开任务管理器,观察安装程序进程的 CPU 和磁盘活动。如果磁盘读写一直有波动,说明它在解压或写入文件,属于正常慢,耐心等。如果 CPU 接近 0 且磁盘活动为零持续十分钟以上,那基本可以判定是卡住了。
真卡住之后的处理顺序:先结束安装程序进程,然后清理临时目录和安装引擎的缓存目录。安装引擎会在系统盘的临时目录和程序数据目录下留下一些半成品文件,这些文件如果损坏,会导致每次重启安装程序都在同一个地方卡住。把相关目录清空后再重新运行安装程序,多数情况下能解决。
如果清理后仍然卡在同一个位置,改用离线布局的方式安装。在线安装卡住很多时候是下载环节的问题,而离线布局已经把包都拉到本地了,能绕开这个环节。这也是我在内网环境里一律推荐离线布局的原因。
还有一个不太常见但确实存在的原因:系统盘剩余空间在安装过程中不够了。安装程序会先解压到临时目录再复制到目标目录,峰值占用可能比最终体积大一截。如果你系统盘只剩几个 GB,就会出现装到一半卡死的情况。这种情况只能清理空间后重来。
6.2 报错代码的分类与对应处理
安装过程中弹窗给错误码的时候,最容易被"代码"两个字吓到。其实这些码大致分三类,归类之后处理思路就很清晰了。
| 错误类型 | 典型表现 | 大致原因 | 处理方向 |
|---|---|---|---|
| 安装服务类 | 提示另一个安装正在进行 | 系统安装服务被占用 | 等待其他安装结束,重启后再试 |
| 包安装失败类 | 某个具体组件安装失败 | 单个包损坏或被拦截 | 清理缓存后单独重装该组件 |
| 网络连接类 | 提示连接超时、下载失败 | 下载链路不通 | 换离线布局,或换网络环境 |
| 证书与系统组件类 | 提示证书链、加密协议相关 | 系统缺少必要更新 | 把系统更新补齐后重试 |
安装服务类是最好处理的一种。Windows 同一时间只允许一个 MSI 任务,后台有系统更新或者其他安装程序在跑,VS 就会等待。处理方式就是等、或者重启机器后再装。
包安装失败类需要看具体是哪个包。提示里通常会带上组件名字。处理方式是打开安装程序,找到那个组件,先取消勾选,把其他内容装完,然后再单独把它勾上重装。这个"先跳过再补装"的思路,在处理个别顽固包时非常有效。
网络连接类信号最明确,就是下载不动。在在线安装模式下,这个错误基本无解,除非你的网络环境本身没问题。这时候离线布局是唯一稳妥的方案。
证书与系统组件类出现在老系统上比较多。老版本的 Windows 缺少某些加密协议的更新,导致连接服务器时握手失败。处理方向是把系统更新打到较新的状态,尤其是与加密、根证书相关的更新。这里我不展开具体补丁编号,因为补丁编号随系统版本变化,最省事的做法是直接开启系统更新让它自己补齐。
提示:安装程序在最后会生成一份日志,里面记录了每个组件的安装结果。看不懂错误码的时候,直接看日志里最后一个失败的组件名字,然后针对这个名字去处理,比对着错误码猜要高效得多。
6.3 装完启动异常:闪退、报缺少组件、许可证提示
安装顺利完成不代表能正常启动,这几种情况也挺常见。
启动闪退,第一反应应该是怀疑扩展。用命令行加/SafeMode参数启动 IDE,如果安全模式下能正常打开,那就确定是某个扩展的问题。接着在安全模式下进扩展管理,把最近装的扩展禁用掉,一个个试,很快能定位。
提示缺少某个组件,一般是安装过程中有包静默失败了,而安装程序最后只给了一个汇总提示。处理方式是打开安装程序,点"修改",它会自动检测缺失的组件并提示补装。
许可证提示,最常见的原因是没登录账号,或者登录的账号没有对应的授权。社区版登录个人账号后即可正常使用。如果是在公司的共享机器上,需要注意账号策略问题,这个得问管理员。
设计器加载不出来,这在打开老项目时特别常见。多半是因为项目目标框架的版本和当前安装的目标包不匹配。回安装程序把对应版本的目标包勾上即可。
6.4 卸载不干净怎么办
有时候装坏了要重来,但卸载之后重启安装程序,发现它还认为环境里已经有这个版本。这种情况通常是卸载时残留了安装状态标记。
处理顺序是:先用安装程序自身的卸载功能卸载,不要手动去删目录。手动删目录会破坏安装程序的记录,导致后面既装不上也卸不掉。如果安装程序本身已经损坏打不开,那就需要走官方的修复或清理工具,这类工具能重置安装状态记录。
强烈不建议手动删注册表项来处理这类问题。安装程序记录了大量的组件引用关系,手删很容易造成后续安装出现更奇怪的问题。宁可多花二十分钟用正规流程清一遍,也不要图快。
7. 后续维护:组件增删、缓存瘦身与多版本共存
装完之后的日子还长,这一节讲的是长期使用中会遇到的几个维护问题。
7.1 想加工作负载时不要重新下载安装包
这是新手最容易犯的错误:想加一个功能,就去把安装包重新下载一遍然后重新装。完全没必要。
正确做法是打开"Visual Studio Installer"这个独立程序(开始菜单里能搜到,和 IDE 是两个东西),在已安装的版本上点"修改",然后在打开的界面里勾选需要新增的工作负载或者单个组件,点确认。它会只下载新增部分的组件,通常几百兆到几个 GB,比全量重装快得多。
同样的思路也适用于移除。想减负的时候点"修改",把不用的工作负载取消勾选,它会把这些组件占用的空间释放掉。我一般在机器上跑过一次大型项目之后,会回头看看有哪些工作负载装了从来没碰过,顺手清掉。
7.2 缓存目录的搬迁与清理
前面提到安装时的下载缓存目录会占掉大量空间。安装完成之后,这个目录里的包通常不再需要,除非你打算以后用离线的方式给别的机器装同样的内容。
所以有两条路。如果你只是单机使用,装完之后直接把这个缓存目录整个删掉,能一次释放十几到几十 GB。删之前确认一下这个目录确实是缓存目录而不是安装目录,路径别搞错。如果你是多机批量部署,那就把它保留在数据盘上,以后新机器直接用这个目录做本地源安装,省下重复下载的时间。
还有一种折中做法:先把缓存目录整体打包压缩归档到备份盘,然后删掉原目录。归档文件能压到原始体积的一半左右,以后需要时解压出来还能用。这个做法适合那种需要长期维护同一版本、又不想白占磁盘的场景。
7.3 VS2017/2019/2022 共存的注意点
不同大版本的 Visual Studio 是可以共存的,这一点很多人不知道。它们各自有独立的安装目录和配置分支,互不干扰。这解决了一个大问题:你不用为了维护老项目而放弃新版本。
共存的几个注意点:
- 共享组件目录会复用。后装的版本如果在同一盘符,会尽量复用已有的共享组件,这是好事,能省空间。但如果你把新版本装到了另一个盘,就没法复用了,会重复占一份。
- 安装程序是统一的。从 2017 开始,安装器是一个全局的组件,能同时管理机器上所有版本的 Visual Studio。所以你会看到安装程序里列出多个版本,这是正常的。
- 文件关联和默认打开方式会有竞争。装完新版本后,双击
.sln文件默认用哪个版本打开,取决于最后安装的那个。可以右键选择"打开方式"来指定,或者用版本选择器插件来管理。 - 磁盘规划要提前想好。如果你打算长期维持两三个版本共存,共享组件目录最好放在空间最充裕的那个盘上,一次性规划好。
我个人在用的机器上就同时保留了老版本和新版本:老项目用老版本打开,保证项目文件不被自动升级;新项目用新版本。两者的配置和扩展互不影响,切换起来没有任何成本。这个方案的唯一要求就是磁盘给够,以及第一次安装时把路径规划好。
最后分享一个我自己踩过的坑:不要因为某个项目在新版本里能打开,就顺手保存。有些项目在保存时会被自动升级工程文件的格式和工具集版本,升级之后老版本就再也打不开了。如果你需要同时在新旧环境之间来回切换,打开老项目之后不要按保存,或者先在版本控制里留一个干净的分支,出问题能退回去。这一条比任何安装技巧都重要,因为它造成的损失是不可逆的。