简介VS2019 是众多开发者常用的集成开发环境不过零基础用户在安装和初始配置时往往容易踩坑。这份 PDF 文档共 1 个文件、约 1.2MB以超详细图文形式从官网下载社区版安装包讲起覆盖自定义安装位置、语言包可选简体中文或繁体、创建第一个空项目、右击源文件添加新建项时务必保留 .cpp 后缀以及编译运行前选择 x86 平台等完整过程。针对安装后遭遇的典型报错文档给出了具体排错思路不支持 C 万能头文件时可改用标准头文件scanf 等不安全函数报错时可换成 scanf_s或添加宏定义绕过警告SDL 安全检查造成干扰时可在项目属性中将 SDL 检查设为“否”还可解除 C 对 C 头文件的绑定以加快编译。最后特别提醒删除 VS 必须彻底否则重装易遇到残留问题。目前已有 4386 人学习下载很适合刚接触 VS2019 的学生和开发者作为快速上手的参考手册。1. VS2019 安装为什么一上来就要避坑组件与字符集VS2019 安装听起来是双击下一步的事真正动手的环节里十个有六个人会卡在组件勾选、字符集、卸载残留这三处。这篇笔记把我自己安装、重装、清理残留的过程完整走了一遍社区版从哪里拿、工作负载怎么勾、创建空项目时后缀为什么不能改、scanf 报错怎么压下去、卸载不彻底会埋什么雷全部对着实际操作来写。适合三类人学校课程指定 VS2019 的在校生、公司还在维护老解决方案的开发者、以及为了 Qt 开发必须配 MSVC 2019 工具链的初学者。下面按安装顺序推进照着点就行。2. 下载与安装器社区版、工作负载勾选与离线包生成2.1 社区版与产品密钥免费版够用别去搜破解VS2019 分为社区版、专业版、企业版三个梯队个人开发者、学生、开源项目作者用社区版完全合法且免费。社区版不限制代码量不开源商用项目也照样能跑不需要输入任何产品密钥启动界面里也不会出现“未激活”之类的状态。想在搜索引擎里找“vs2019 产品密钥”的人多半是被旧教程带了节奏实际下载时选 Community 按钮就够了。下载完成后得到的不是完整的 IDE而是一个 vs_community.exe 引导程序。这个引导程序本身只有几 MB真正的工作负载、SDK、工具链都要在联网状态下从微软服务器拉取。换句话说网络不好的人第一步就会卡在“下载中”界面。这时候别急着反复重开安装器先确认内网能连通外网或者直接跳到最后第 6 章用命令行方式生成离线包。安装器的首页会列出工作负载、单个组件和语言包三栏语言包默认只有英文。勾选界面下方会实时显示“估算磁盘空间”完全没概念的人直接照这个数字准备 C 盘空间。如果你只需要写 C/C别去碰“通用 Windows 平台开发”“Office 开发”这类工作负载它们会把 Windows SDK、UWP 工具链一股脑塞进磁盘装完才发现占了 20 多 GB卸载又要折腾一遍。2.2 工作负载怎么勾按语言选别照单全收主界面里第一屏是“工作负载”这里的选择直接决定后面编译器的可用性。写 C 或 C 代码勾选“使用 C 的桌面开发”这一项就够了它会自动带上 MSVC v142 编译器、Windows 10 SDK、C CMake 工具和测试工具链。d甚至是后面配 Qt 时Qt 官方安装包要求的“MSVC 2019 64-bit”编译器也包含在这个工作负载里不需要额外装其他 VS 扩展。单个组件那一栏不用动系统已经跟随工作负载把核心项选好了。如果非要自己点最容易误操作的是把同一个组件的高版本和低版本同时勾上比如 Windows 10 SDK 装两个版本以后打开别人项目时会疯狂提示目标框架版本不匹配。语言包这栏我习惯只勾简体中文VS2019 的多语言包可以后续在安装器里追加一次装太多只会拖慢首次启动和更新下载速度。英文界面虽然看着陌生但搜索报错时好处很明显建议有能力的人顺手把英语也勾上。磁盘空间方面纯 C 桌面开发大概需要 5 到 8 GB这还不包括后续 NuGet 包和 vcpkg 下载的第三方库。组件估算界面下方有“下载大小”和“安装大小”两行数据后者才是实际的磁盘占用前者的下载完成后会解压并缩放别拿下载大小来衡量磁盘余量。2.3 安装位置与缓存为什么建议默认 C 盘安装位置默认在 C 盘很多人一看系统盘变红就想改到 D 盘。我的建议是除非 C 盘只剩个位数 GB否则保持默认。VS2019 的安装目录、Windows SDK、MSBuild 目标和 Visual Studio Installer 的缓存包之间存在路径联动改到其他盘不是不行但后续新增组件、修复安装、跨版本共存时安装器偶尔会找不到既有路径表现就是“无法修改安装”或“找不到指定组件”。如果确实要改安装器界面里“Visual Studio 2019”下方有“安装位置”页签可以分别改“安装位置”和“下载缓存位置”。注意下载缓存对应的目录是C:\ProgramData\Microsoft\VisualStudio\Packages或你在安装器里指定的位置它存放所有已下载的组件包。把安装位置移到 D 盘后缓存目录尽量保留在 C 盘原因是 Windows SDK 安装过程中部分脚本仍会引用 ProgramData 目录改动它反而更容易触发权限问题。点击右下角“下载安装”之后安装过程会持续 20 到 60 分钟视网络质量而定。中途取消再续传是允许的但不要直接杀进程否则安装缓存目录里会留下大量半成品文件体积可能超过 10 GB。安装完成后建议先重启一次系统再启动 VS之前遇到过不重启直接打开 IDE 导致“评估许可证过期”的假报错其实是安装器还没把环境变量刷进当前会话。2.4 离线包官网入口缺失时的备选方案现在访问官网找 VS2019 下载入口会发现首页已经变成了 VS2022旧版本的安装引导程序不再直接展示。搜“vs2019 离线安装包”的人越来越多就是因为官网入口变浅或者内网环境下载太慢。其实微软仍然保留了通过命令行生成离线包的能力只需要找到一个有效版本的 vs_community.exe 引导程序即可。vs_community.exe --layout D:\vs2019_offline --lang zh-CN --add Microsoft.VisualStudio.Workload.NativeDesktop--layout指定离线包的输出目录生成后的目录里有完整的安装器和组件包--lang zh-CN表示只下载简体中文语言包想保留英文调试信息可以写成zh-CN en-US--add指定工作负载这里只拉取 C 桌面开发体积比完整版小很多。执行命令后程序会开始下载全部依赖下载完成的目录可以整个拷贝到离线机器上双击目录里的 vs_community.exe 即可安装不需要联网。如果下载中断重新执行相同的命令会继续断点续传。多台同配置机器复用同一个离线包是常见做法但每台机器安装后仍需要执行在线更新否则组件版本会冻结在离线包生成的时间点。另外离线包安装完成后D:\vs2019_offline这个目录就可以删除了它不是运行依赖留着只会继续占用磁盘。3. 创建第一个 C 项目空项目、源文件与 x86 调试平台3.1 新建空项目为什么不用控制台应用模板启动 VS2019 后起始页选择“创建新项目”项目模板里既有“控制台应用”也有“空项目”。控制台应用模板会自动生成一个包含main函数的.cpp文件看起来省事但它预置的代码结构对初学者并不友好比如默认带stdafx预编译头的旧模板会把问题复杂化。我更推荐选“空项目”所有细节都从零开始搭每一行代码的来历都清楚。空项目创建完成后解决方案资源管理器里会看到一个解决方案.sln文件和一个项目.vcxproj文件。一个解决方案可以装多个项目一个项目通常对应一个可执行程序或静态库。初学阶段一个解决方案里只有一个项目就够了不需要为它们的关系费神。解决方案是容器项目是实际编译单元编译按钮针对的是当前项目不是整个解决方案。创建时右下角有一个“创建新项目”的按钮点了之后可能弹出“不可用”提示多半是 SDK 版本没有选对。模板列表里选择“空项目”后会在下方“配置”里看到 Debug 和 Release 两个默认配置这是 VS 自带的构建配置Debug 关闭优化便于调试Release 开启优化适合发布现在选 Debug 就行。3.2 添加源文件右击源文件新建项的后缀不能乱改空项目创建后解决方案里的“源文件”文件夹是空的。右击源文件 → 添加 → 新建项在弹出的对话框里选择“C 文件(.cpp)”文件名可以叫main.cpp或随便什么名字。原文里特别强调“后缀 .cpp 不要修改掉”这一点值得展开VS 依靠扩展名来决定调用哪种编译器.c后缀会走 C 编译器.cpp后缀才走 C 编译器和 C 标准库。如果把文件后缀改成.txt或.cc文件会被识别为普通文本或非常规源码直接排除出编译列表F5 运行时提示“无法启动程序”或“找不到入口点”。新建项对话框右下角的“名称”和“位置”两个字段位置保持项目目录默认值即可名称末尾手动敲上.cppVS 一般会自动补全但手动敲更保险。添加完成后解决方案资源管理器里的main.cpp会出现在源文件节点下。双击打开就能写代码。此时工程还没有可执行入口编译会报LNK2019 无法解析的外部符号 _main等代码写完就不会有这个错。整个过程我只推荐在“源文件”节点下新建不要在“头文件”节点下新建.cpp那样虽然文件还在但项目结构会乱后面同步文件列表时会多费一轮功夫。3.3 第一行 C 代码与编译运行流程#include iostream using namespace std; int main() { cout Hello, VS2019 endl; return 0; }#include iostream是输入输出流标准头using namespace std让cout、endl不必写std::前缀。main是整个程序的入口操作系统启动进程后从它开始执行。cout ... endl负责在控制台输出一行文本并换行return 0表示程序正常结束。写完代码后菜单栏“调试”里有两个常用菜单项开始调试快捷键 F5和开始执行(不调试)快捷键 CtrlF5。初学者常常分不清二者区别F5 会启动调试器程序运行到断点会暂停适合查逻辑错误CtrlF5 直接运行程序控制台窗口停留适合看输出结果。第一次运行建议用 CtrlF5能直接看到Hello, VS2019的结果。如果编译时提示“无法打开文件 main.cpp”先检查文件是否真的在项目目录里常见做法是把文件拖进 VS 时只是打开了副本而不是加入项目。正确方式是右击“源文件”添加现有项或者从资源管理器拖动文件到源文件节点下让 VS 识别为项目成员。看到底部“输出”窗口出现“已成功生成”的同时显示“0 个错误、0 个警告”就可以运行了。3.4 x86 还是 x64初学者为什么先选 x86工具栏中部有一个“解决方案平台”下拉框常见选项是 x86、x64、Win32。原文要求选 x86原因在于 32 位程序在 64 位 Windows 上兼容性最好几乎所有第三方库都提供 32 位版本而 64 位库偶尔会遇到“LNK1112: 模块计算机类型 x86 与目标计算机类型 x64 冲突”这类错误。课程作业、算法题、小型桌面工具用 x86 完全够用不存在性能瓶颈。切换到 x86 的方式很简单单击工具栏“解决方案平台”下拉框选择“x86”或“新建”在里面创建一个名为 x86 的解决方案平台。VS2019 部分版本默认显示的是 x64需要手动添加 x86 平台。切换到 x86 后输出窗口里编译命令行会多出/MACHINE:X86参数这是链接器指定目标架构的标志。如果以后做图像处理、数值计算或需要大内存的工程再切到 x64 不迟。x64 平台的程序运行时要求 CPU 支持 64 位指令集现在市面上的机器基本都满足但实验室老旧机器未必。初学阶段不涉及两种架构的性能差异优先保证程序能跑才是正道。Debug 模式下 x86 和 x64 的编译速度差别几乎感知不到真正拉开差距的是 Release 长期运行的大型软件。4. 编译与运行排查万能头、scanf、字符集的五个踩坑现场4.1 万能头bits/stdc.h编译失败很多从 OJ 平台转到 VS2019 的人习惯把#include bits/stdc.h直接粘贴进来编译后立刻报错fatal error C1083: 无法打开包括文件: bits/stdc.h: No such file or directory。原因是bits/stdc.h是 GCC/Clang 工具链自带的非标准头文件它把所有标准库一次性包含进来OJ 系统用 Linux 加 GCC能编译通过。微软的 MSVC 编译器并不提供这个头它属于 GCC 内部实现不属于 C 标准。让我把问题解释得更直白这不是 VS 配置问题是这个头根本不存在。解决方法是换成标准头文件组合。写算法题一般只需要iostream输入输出、vector动态数组、algorithm排序查找、string字符串。哪些头文件对应哪些容器直接决定你 include 的范围装不下全部。问题在于代码已经写了千百行换头文件要去逐个确认依赖初期多花十分钟后面一劳永逸。4.2 scanf 报错C4996 与不安全函数警告现象是error C4996: scanf: This function or variable may be unsafe后面还跟着建议改用scanf_s。原因是微软默认开启安全检查把 CRT 库中缓冲区容易溢出的函数标记为不安全编译器直接报错而不是警告。解决方式有三条路。第一条是按要求改成scanf_s注意它和scanf参数并不完全一样#include cstdio int a; char str[100]; scanf_s(%d, a); // 整数不需要额外参数 scanf_s(%s, str, 100); // 字符串必须传缓冲区大小scanf_s对整数参数与scanf一致但对字符串输入多一个“缓冲区大小”参数用来防止写入越界。这里第二个100是str数组的长度如果填错成小于字符串长度运行时会被安全检查拦下。写算法题时逻辑简单但读单词、读行时容易漏掉第三个参数编译不报错运行可能拦截。第二条路是加宏定义绕过安全检查。在源文件最顶部在所有#include之前写上#define _CRT_SECURE_NO_WARNINGS这能让整个编译单元对安全告警免疫。第三条路是预处理器定义右键项目 → 配置属性 → C/C → 预处理器 → 预处理器定义追加_CRT_SECURE_NO_WARNINGS这样对整个项目所有文件生效。我一般用第三种改一处省心。4.3 字符集问题Unicode、多字节与中文乱码现象之一是调用SetWindowText或写中文输出时参数类型对不上编译器提示LPWSTR 与 LPCSTR 不兼容现象之二是程序里明明写了中文运行输出乱码成一片问号。原因要落到字符集设置上。VS2019 新建项目默认使用 Unicode 字符集意味着 API 的宽字符版本被优先解析字符串常量要变成宽字符串。而老代码、教材例题大多按多字节字符集MBCS/GBK编写窄字符函数和窄字符串类型才是它们的原生环境。解决办法是右键项目 → 配置属性 → 常规 → 字符集从“使用 Unicode 字符集”改成“使用多字节字符集”。如果你在折腾 Qt 配 VS2019中文乱码的原因又多一层VS 源码文件默认按本地区代码页保存中文 Windows 是 GBKQt 的QString内部按 UTF-16 存储源码里的中文字面量经编译器转码后常见不一致。保存源码时用“文件→高级保存选项→编码 UTF-8 带 BOM”乱码问题能消除大半。VS2019 对应的工具集是 v142Qt 安装时选“MSVC 2019 64-bit”而不是 MinGW两者配合时再注意编码中文基本不再翻车。4.4 SDL 检查与解除绑定关掉警报的代价现象是编译时全屏刷安全函数警告烦得看不下去也有人为了“加速运行”去点掉一些莫名其妙的选项结果代码正常但编译器行为变得很怪。原文里提到“将 SDL 检查改成否”和“解除 C 对 C 头文件的绑定”这两项放在一起说。SDL 全称 Security Development Lifecycle开启后把不安全函数告警升级为错误并强制启用一些运行时安全检查。右键项目 → 配置属性 → C/C → 常规 → SDL 检查改成“否”C4996 这类告警就会变成非阻断信息scanf不加宏定义也能编译。代价是失去一部分静态安全检查对刷题写小程序没多大影响但要清楚这不是让程序变快只是让编译更宽松。网上流传的“解除 C 对 C 头文件绑定”操作实际效果是修改头文件包含规则跳过一部分 C 运行时头文件的兼容性处理多数情况下体感不到任何提速。真想让算法题程序跑得快该做的是把解决方案配置从 Debug 切到 Release打开优化选项而不是折腾这些编译开关。Debug 版默认关闭优化同一段代码可能比 Release 慢几倍。4.5 运行窗口一闪而过CtrlF5 与 system 暂停现象是程序执行完控制台窗口瞬间关闭输出结果根本看不清。原因很简单控制台程序作为进程运行结束后系统回收窗口不再等待用户输入。临时解法是在return 0之前加一句system(pause)按下任意键后进程才退出。这个函数能压住窗口但它依赖 Windows 的pause命令拿到 Linux 或 macOS 上编译直接失败。正确习惯是用 CtrlF5 启动“开始执行(不调试)”VS 在调试器外运行控制台程序时会自动在程序退出前提示“请按任意键继续”。从那以后我写控制台代码一律按 CtrlF5不再往代码里塞system(pause)这也让我在跨平台编译时少了一批 “cannot find system pause” 的报错。5. 卸载与重装删不干净 VS 的代价与清理命令5.1 直接删文件夹为什么处处碰壁很多人觉得 VS 不好用随手就把安装目录删除或者用各种右键的强力删除工具清掉整个Microsoft Visual Studio 2019文件夹。等到重新安装时安装器要么提示“检测到已安装的版本”要么在安装过程中报系统找不到指定文件最后装出来的 IDE 还会带着一堆残留配置界面语言是英文扩展全部失效。原因在于 VS 的安装信息并不只存在安装目录里。安装器把注册信息写在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\16.0下下载缓存放在ProgramData\Microsoft\VisualStudio\Packages用户的主题、扩展、启动配置放在%AppData%\Microsoft\VisualStudio\16.0_xxx。直接删程序目录等于只拆了冰山一角注册表和缓存里的残留仍指向旧版本安装器重新检测时会认为“已安装”于是拒绝覆盖。正规卸载路径是先打开“Visual Studio Installer”找到对应版本点击“卸载”。安装器会先按组件列表移除已安装的工作负载再清理注册表和对系统环境变量的改动。这个卸载步骤才是真正意义上的“彻底”后面重装出错的可能性低很多。先执行卸载器再谈手动清理顺序不能反。5.2 卸载之后手动补一刀缓存、进程与临时文件安装器卸载完成后IDE 主体被移除但 ProgramData 和 LocalAppData 里的缓存目录往往仍然存在。它们不影响下次安装但会白占几个 GB而且下载缓存里残留的陈旧组件包可能在重装时被优先复用导致新版组件装不上去。这时候需要用命令手动补一刀。# 停止所有残留的 VS 后台进程安装器卸载通常不会主动杀 devenv Get-Process | Where-Object { $_.Name -like vs_* -or $_.Name -like devenv* } | Stop-Process -Force # 删除安装缓存与包目录 Remove-Item -Recurse -Force $env:ProgramData\Microsoft\VisualStudio\Packages -ErrorAction SilentlyContinue # 删除当前用户的 VS 配置文件目录 Remove-Item -Recurse -Force $env:LocalAppData\Microsoft\VisualStudio -ErrorAction SilentlyContinue第一段命令把所有以vs_或devenv开头的进程强制结束避免卸载过程中文件被占用。第二个Remove-Item清掉安装缓存第三个清理当前用户级配置。-ErrorAction SilentlyContinue表示目录不存在时静默跳过不会报红吓人。注册表我一般不建议手动改除非你明确知道要删哪个键否则误删系统全局配置比 VS 残留麻烦得多。%Temp%目录下还可能有 VS 安装器的临时文件用系统自带的磁盘清理把“临时文件”勾上即可不影响系统安全。重装前最好重启一次电脑确保文件占用全部释放这个操作花不了两分钟但能省掉后续一堆玄学报错。5.3 重装版本冲突升级到 VS2022 后找不到 v142 工具链场景很常见原来装了 VS2022为了打开别人发来的 VS2019 项目又装了 2019结果新建项目里看不到 MSVC v142 编译器或者编译时报工具集 v142 未安装。原因在于 VS2019 和 VS2022 的安装是并存的它们共享 Visual Studio Installer但各自管理自己的工作负载组件。VS2022 默认安装的是 MSVC v143 工具集不代表 v142 会自动跟上。要编译 VS2019 时代的项目必须在安装器里对 VS2019 执行“修改”勾选“使用 C 的桌面开发”v142 工具集才会补装。还有一种情况是删除 VS2019 后重装发现打开旧项目报“需要 .NET Framework 4.6.2 目标包”。这个目标包属于“单个组件”卸载时如果只移除工作负载它可能被当作独立组件保留或一同清掉。解决方式同样是打开安装器 → 修改 → 单个组件勾选对应的 .NET Framework 目标包。多版本共存时不要指望 A 版本的组件能被 B 版本调用每个版本缺了组件就独立装这类问题基本都是配置缺件造成的。6. 进阶操作命令行改组件、配置备份与调试习惯安装器在图形界面下能做的操作在命令行里基本都能重放。内网批量部署、多台机器统一配置时图形界面点一遍太慢用命令更可控vs_installer.exe modify --installPath C:\Program Files (x86)\Microsoft Visual Studio\2019\Community --add Microsoft.VisualStudio.Workload.NativeDesktop --quiet--installPath指定已安装实例位置--add表示追加安装工作负载--quiet不进交互界面。如果离线部署同样的命令会优先读取本地缓存不再访问外网。配置文件备份也别忘。VS2019 的主题、字体、窗口布局、快捷键都散在用户目录里我习惯重装前导出一次配置项位置主题、字体、窗口布局%AppData%\Microsoft\VisualStudio\16.0_xxx导入导出设置工具 → 导入导出设置文件可拷走扩展插件扩展 → 管理扩展清单可导出主题在“工具 → 选项 → 环境 → 常规”里改深色代码字体在“字体和颜色”里调这两个设置跟着配置文件走备份后重装一次还原。调试习惯上真正应养成的只有三个快捷键CtrlF5 直接运行、F9 下断点、F10 逐行执行。从那以后我每次重装 VS 前都强制自己走一遍“导出配置 → 安装器卸载 → 清缓存 → 重装还原”这套流程是踩过坑后才固定下来的希望帮到你。本文还有配套的精品资源点击获取
阅读完成 · 觉得有帮助?