十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Visual Studio 2019离线安装包制作与部署实战指南

Visual Studio 2019离线安装包制作与部署实战指南 如果你所在的办公网络策略很严或者实验室、培训机房里的电脑根本连不上外网那装 Visual Studio 2019 就是一件特别折磨人的事。在线安装器本身只有几 MB运行时却要从微软的 CDN 上拉下来几十 GB 的组件包稍微断个网、遇到网关拦截就得从头再来。我做开发环境维护这些年最怕听到的一句话就是同事抱着一台不能联网的电脑问我“VS2019 离线安装包到哪里下载”其实这个问题有标准解法用微软官方引导程序自己生成离线布局layout把下载、分发、安装整个环节都变成可控操作。这篇文章就把我的完整实操过程写出来内容包括离线包原理、命令行参数、组件选择、部署命令、常见报错排查最后还会给几套可以直接抄作业的命令模板。无论你是给内网机器搭环境还是准备批量部署实验室和培训机房都可以按这套流程操作。1. 为什么要折腾离线包VS2019 安装机制与真实痛点1.1 几 MB 的引导程序其实只是个下载器在讲离线包之前先得搞清楚 VS2019 的安装器到底怎么运作。你在官网下载到的 vs_community.exe、vs_professional.exe、vs_enterprise.exe体积都很小它们并不是完整的安装镜像本质上是一个“引导程序 命令解释器”。引导程序会先读取产品清单把你勾选的工作负载、组件转成一个个包 ID再通过 HTTPS 从微软的分发节点拉取 .cab 压缩包、.msi 安装包、.json 清单文件解压到本地临时目录后执行安装。整个链路里只要有一环网络质量不好就会出现下载失败、安装回滚这类问题。我自己遇到过多次这种情况。新同事入职要搭 C 开发环境在线安装跑到一半可能因为网络抖动直接从 40% 跳到报错 0x80072EFD重新打开安装程序有的包在缓存里有的包又丢了进度条像和稀泥一样来回折腾。如果是公司网关只放行浏览器流量、不放行安装器的下载域名那在线安装基本就判死刑了。对比之下离线布局的做法是把“下载组件”和“安装组件”分开先在联网机器上把包一次性拉全再把整个目录搬到目标机器安装时完全走本地文件不受网络波动影响。这个思路和 Office 部署工具、SQL Server 安装介质里提前准备本地源的做法是同一个套路只是 VS 的包体积更大、更依赖清单结构细节上要多注意一些。1.2 哪些场景真正需要离线安装包离线包的核心价值不是“省流量”而是可控和可重复。如果你只是在自己电脑上装一次 VS2019在线安装当然没问题但下面这几种场景离线包几乎就是刚需。场景在线安装痛点离线布局的解法内网隔离环境无法访问微软 CDN提前下载布局整体拷入内网批量部署每台机器重复下载耗时耗带宽共享一份布局轮流安装版本固定在线安装容易拿到最新补丁布局保存后可锁定组件集合弱网环境断点续传不稳定经常半路失败安装阶段完全不依赖网络拿批量部署来说实验室或者培训机房如果有几十台同配置电脑一台台在线安装会疯掉。比较合理的做法是在一台联网机器上把布局下载好放到共享目录然后写一个静默安装命令批量执行每台机器安装时间基本一致部署效率高很多。版本固定也很重要旧项目往往依赖特定版本的编译器或 SDK在线安装默认拿最新补丁容易把环境搞“新”了离线布局能保证所有机器拿到同一批组件。1.3 离线布局到底长什么样离线布局不是一个 exe 文件。用 --layout 生成出来的目录里主要包含 packages、channel、certs 等内容。packages 里是几百个组件包channel 里存放产品渠道清单certs 则是微软用来做包校验的证书信息。很多人以为把官网下载的 vs_enterprise.exe 单独拷进内网就是离线包结果运行后照样开始联网下载因为这只是一个空壳引导程序旁边没有 packages 就等于没有弹药。理解这个结构后面排错会省非常多的时间。还有一个常见的误解是把“离线包”等同于“绿色版”其实 VS 并没有绿色版一说离线布局只是把安装源提前备好装完之后 VS 依然是正常安装的系统级软件涉及注册表、服务、全局工具链等这一点要提前跟团队说清楚免得有人期待太高。2. 下载前准备官方引导程序与参数速查2.1 从官方渠道拿正式版引导程序制作离线包的第一步是拿到 VS2019 的正式版引导程序。打开微软 Visual Studio 官网在“较早版本”或“下载”页面里能找到 Visual Studio 2019 的入口里面有 Community、Professional、Enterprise 三个版本。Community 对个人开发者免费Professional 和 Enterprise 属于商业订阅版本安装时需要账号或产品密钥。离线包只解决“分发”问题不解决授权问题所以该登录登录、该输入密钥输入密钥。下载后我建议右键查看数字签名确认签名方是 Microsoft Corporation 且状态“正常”。这一步很重要因为网上有不少第三方转载的“VS2019 离线包”“VS2019 整合包”里面很可能塞了后门脚本或者捆绑软件用官方引导程序自己生成布局既干净又可控。生产环境装开发工具真的没必要在这种环节冒险。2.2 核心命令行参数解读引导程序提供了一整套命令行参数日常用到的其实就那么几个。下面这张表我建议收藏做离线包和静默安装都会反复用到。参数作用示例--layout指定离线缓存目录把组件下载到该目录vs_enterprise.exe --layout D:\vs2019offline--lang指定语言包多个语言用空格分隔--lang zh-CN--add指定工作负载/组件 ID可多次出现--add Microsoft.VisualStudio.Workload.NativeDesktop--includeRecommended包含所选工作负载的推荐组件配合 --add 使用--includeOptional包含可选组件体积会明显上涨按需添加--architecture指定下载架构--architecture x64--passive安装时显示进度但不要求用户操作目标机安装时使用--quiet完全静默安装无界面无人值守部署时使用--norestart安装结束后不自动重启配合 --quiet/--passive--installPath指定 VS 安装目录--installPath D:\VS2019--includeRecommended 和 --includeOptional 的取舍非常关键。--includeRecommended 会带上微软认为该负载最常用的周边组件比如做 C 桌面开发时会连带 MSVC 编译器、Windows SDK、MSBuild 等--includeOptional 则会把大量可选工具也拉进来体积成倍上升。如果只是给团队搭常规开发环境建议只加 --includeRecommended够用且可控。要拉全量组件的话先想清楚磁盘放不放得下。2.3 工作负载与组件 ID 怎么拼组件 ID 的命名规则很直观Workload 是“工作负载”Component 是“单个组件”。工作负载是一组组件的集合比如选 NativeDesktop会自动拉 CMake 工具、Windows SDK、MSVC 编译器、标准库头文件等。下面是 VS2019 常用工作负载 ID做离线包时按实际需求挑。工作负载名称组件 ID适合场景C 桌面开发Microsoft.VisualStudio.Workload.NativeDesktopC/C 桌面程序、Windows 驱动、Qt 项目.NET 桌面开发Microsoft.VisualStudio.Workload.ManagedDesktopWinForms、WPF、C#/VB 桌面应用ASP.NET 和 Web 开发Microsoft.VisualStudio.Workload.NetWebWeb 后端、ASP.NET MVC、Web API.NET Core 跨平台开发Microsoft.VisualStudio.Workload.NetCoreTools.NET Core / .NET 5 应用Python 开发Microsoft.VisualStudio.Workload.PythonPython 脚本、调试、数据工具通用 Windows 平台开发Microsoft.VisualStudio.Workload.UniversalUWP 应用Node.js 开发Microsoft.VisualStudio.Workload.NodeNode.js 项目Visual Studio 扩展开发Microsoft.VisualStudio.Workload.VisualStudioExtensionVS 插件和扩展开发拼命令的时候可以连续跟多个 --add例如vs_enterprise.exe --layout D:\vs2019offline --lang zh-CN --add Microsoft.VisualStudio.Workload.NativeDesktop --add Microsoft.VisualStudio.Workload.ManagedDesktop --includeRecommended这时候下载下来的布局就包含“C 桌面开发 .NET 桌面开发 推荐组件 中文语言包”。以后离线安装时也只能安装这些已经下载好的组件布局里没有的组件即便在安装界面勾选也会提示找不到安装包。3. 实操创建离线安装包并完成部署3.1 第一步选择目录并执行布局下载实际操作时我先说几个基础设施层面的建议都是踩过坑之后养成的习惯。布局目录要放在 NTFS 分区且路径尽量短、不要带空格和中文。VS2019 的组件包文件名很长路径过深会触发 Windows 的路径长度限制安装时出现“找不到文件”这类诡异错误。预留足够磁盘空间。根据组件组合不同体积差异很大最稳妥的做法是先按 2.3 节的表格估算一下再留出 20% 余量。用管理员身份打开命令行避免权限不足导致下载或安装失败。然后执行布局下载命令cd D:\downloads vs_enterprise.exe --layout D:\vs2019offline --lang zh-CN --add Microsoft.VisualStudio.Workload.NativeDesktop --add Microsoft.VisualStudio.Workload.ManagedDesktop --add Microsoft.VisualStudio.Workload.Python --includeRecommended执行后引导程序会开始下载界面上能看到每个组件的状态。首次下载的时间取决于网络和组件数量我根据自己的经验给一个大概参考方案组件组合预计体积最小 C 方案NativeDesktop Recommended约 8~15GB.NET 桌面方案ManagedDesktop Recommended约 5~10GB常用全栈方案Native Managed Python Web约 20~35GB全量方案--all 所有工作负载 多语言100GB 以上体积按渠道清单浮动这里给的是个人经验值不是精确数据。需要注意的是下载过程中不要关掉命令行窗口也不要强制结束进程否则容易出现残留的半截包。3.2 布局维护增量更新与完整性检查下载完成不代表永远完事。VS2019 的补丁、安全更新会定期推送如果你的离线环境要长期使用建议每隔一两个月在联网机器上把相同命令重新执行一次引导程序会做增量下载把新增和更新的包补齐然后把整个 layout 目录同步到内网。注意不要因为磁盘空间不够就把 packages 下某些“感觉没用的包”删掉。布局完整性一旦损坏后续安装和更新时排查起来非常痛苦。如果确实需要清理空间更推荐重新生成一个新的布局目录而不是在原目录上做减法。拷贝布局到内网时不论用移动硬盘还是共享目录都要保持目录结构完整。我见过有人只拷贝 packages 不拷贝 channel导致目标机器上的引导程序无法识别本地源还是会尝试联网。拷贝完成后建议先在一台目标机上试装一次确认没问题再批量分发。3.3 目标机离线安装UI 与静默两种方式目标机上的安装有两种常见做法。第一种是把整个 layout 目录拷贝到目标机进入目录双击 vs_enterprise.exe或者 setup.exe。此时引导程序会自动识别旁边的 packages 作为本地源不会再联网下载。这种方式适合单台机器手动安装所见即所得。第二种是在共享网络位置的场景下手动指定布局路径vs_enterprise.exe --layout \\192.168.1.10\vs2019offline --add Microsoft.VisualStudio.Workload.NativeDesktop --includeRecommended --passive --norestart注意安装阶段加 --layout 参数指向的是离线源的路径不是要重新下载。--add 参数同样要写清楚装哪些工作负载否则静默安装可能一个组件都不装装完只剩个空壳 IDE。如果要做无人值守安装加上 --quiet 参数同时用 --installPath 把安装目录换到非系统盘避免 C 盘压力过大vs_enterprise.exe --layout \\192.168.1.10\vs2019offline --add Microsoft.VisualStudio.Workload.NativeDesktop --includeRecommended --quiet --norestart --installPath D:\VS2019实际部署时我一般用 --passive 而不是 --quiet因为被动模式能看到进度条对排查问题更友好。不管用哪种模式日志都会写到 %TEMP%\dd_setup_*.log真出问题就翻日志比凭感觉猜有效得多。4. 常见安装报错与排障实录4.1 高频报错速查表VS2019 安装报错五花八门但大部分都可以归到几个固定原因。下面这张表是我这几年遇到的高频问题汇总看到类似报错直接照着排查。现象 / 报错常见原因处理方法0x80072EFD / 网络连接失败在线下载阶段网络被拦改用离线 layout 安装检查网关策略磁盘空间不足 0x80070070缓存或安装分区空间不够清理 %TEMP%布局和安装路径换大分区找不到文件 / 路径过长布局目录路径太深移动到浅目录如 D:\vs2019offlineMicrosoft Visual C 2019 Redistributable (x64) is not installed部分组件依赖 VC 运行库先装 vc_redist.x64.exe 再安装WebView2 Runtime 缺失VS 某些工具窗口依赖 WebView2提前安装 WebView2 Runtime 离线安装包CUDA integration 报 no supported version of Visual Studio系统里没有匹配的 VS 或 C 组件安装对应 VS2019 和 C 桌面负载再装 CUDAcould not find any instance of Visual Studio引导程序与已安装实例不匹配确认目标机装的是 VS2019 还是 2022用对应引导程序安装界面卡在“正在下载”布局不完整或网络仍被拦截检查 packages 目录重新执行 layout 补全这几类问题里我想单独展开讲讲 VC 运行库和 WebView2因为这两个是内网环境最容易“连环踩坑”的。4.2 VC 运行库和 WebView2 这两个老熟人你可能遇到过装某个第三方软件时提示 “Microsoft Visual C 2019 Redistributable package (x64) is not installed”——这其实是系统里缺少 VC 运行库跟 VS2019 本体不是一回事但 VS 的某些可再发行组件会依赖它。内网机器没法在线下载建议在离线包里把 vc_redist.x64.exe 也备一份遇到这类提示先装上再跑 VS 安装程序。另一个是 WebView2 Runtime。新版 Visual Studio 的欢迎页、部分工具窗口依赖 WebView2很多内网老机器默认没装装 VS2019 的时候可能报错。解决办法是提前从微软官网下载 WebView2 Runtime 离线安装包装完再安装 VS。这两样都是几 MB 到几十 MB 的小东西随手放进离线共享目录能省下不少沟通成本。4.3 下载中断与布局损坏的处理经验layout 下载到一半网络断了不必急着删目录从头再来。重新执行一遍相同的下载命令引导程序会逐个校验已有文件缺失的补下完整的跳过。这是最省事的方式也是我推荐的首选方案。如果你实在不放心缓存的完整性可以把 packages 目录改名备份后重新下载或者换到网络环境更稳定的时候跑。我的习惯是把组件拆分几次下载先跑 C 桌面开发下完确认目录完整再追加 .NET、Python 等 --add。虽然多执行几次命令但每次的下载过程和结果都更可控出了问题也容易定位不至于一次性下 30GB 结果末尾报错还得从头再来。4.4 企业内网批量部署的几个注意点如果是给整个公司或者单位做标准开发镜像建议把布局目录放在一台共享服务器上只读共享给所有人。这里有两个注意点。一是共享权限和防火墙要提前测好别因为权限问题把用户挡在外面。建议直接给只读权限避免有人误删组件。二是内网分发时不要使用未经校验的外部“集成离线包”那些东西往往来路不明甚至夹带额外脚本。VS2019 的离线布局制作本身不复杂一次完整 layout 也就半小时到一两小时没必要为了省这点时间冒安全风险。对新版 VS 支持 .vsconfig 配置文件的情况也可以先在一台机器上选好组件并导出配置之后安装时用 --config 参数指定做到配置统一。如果你手上的 VS2019 版本不支持该参数直接用命令行里连续 --add 的方式也能达到同样效果。5. 拿来就用的命令模板汇总5.1 C 桌面开发离线包模板如果团队主力是 C/C 桌面开发这个模板基本够用vs_enterprise.exe --layout D:\vs2019offline --lang zh-CN --add Microsoft.VisualStudio.Workload.NativeDesktop --includeRecommended需要 CMake 支持的话再追加一个组件 IDvs_enterprise.exe --layout D:\vs2019offline --lang zh-CN --add Microsoft.VisualStudio.Workload.NativeDesktop --add Microsoft.VisualStudio.Component.VC.CMake.Project --includeRecommended5.2 .NET 全栈开发离线包模板做 C#、VB、ASP.NET 这类项目的团队推荐这个组合vs_enterprise.exe --layout D:\vs2019offline --lang zh-CN --add Microsoft.VisualStudio.Workload.ManagedDesktop --add Microsoft.VisualStudio.Workload.NetWeb --includeRecommended这样下来 WinForms、WPF、ASP.NET MVC 和 Web API 的开发组件都覆盖到了适合大多数 .NET 业务项目。5.3 目标机静默安装模板目标机上用下面这条命令可以实现完全静默安装适合用批处理脚本批量执行vs_enterprise.exe --layout D:\vs2019offline --add Microsoft.VisualStudio.Workload.NativeDesktop --includeRecommended --quiet --norestart --installPath D:\VS2019把 --quiet 换成 --passive 可以看到安装进度首次小范围试点时建议用 --passive确认稳定后再上全静默。5.4 我踩过几次坑之后留下的习惯最后分享几个我自己留了很久的操作习惯。离线布局会随着时间“过期”。微软会更新渠道清单旧清单和服务器新清单不完全一致时重新执行 layout 命令会自动刷新所以联网机器上的布局源要定期重跑一次别放半年不管。VS2019 和 VS2022 的引导程序、布局不能混用。如果你还要维护 VS2022 的离线包两套目录要分开管理、各自打标签别混在一个文件夹里。我自己现在新项目基本用 VS2022但凡是接手遗留的 MFC、Qt、老 .NET Framework 项目VS2019 的离线包依然是救命稻草建议有相关业务的朋友把 2019 的布局保留好真到用时能省几天时间。再补一句布局目录里那几十个 GB 的 packages 文件看着占地方但千万别手贱去删。删一个包后续补装某个组件时就要重新联网下内网环境就彻底卡住了。宁可多留一份完整的布局放在冷备硬盘里也不要等出问题再后悔。
返回列表