網(wǎng)離線(xiàn)安裝保姆級(jí)指南:從下載到部署全流程)
做內(nèi)網(wǎng)開(kāi)發(fā)環(huán)境的同學(xué)或者是在保密網(wǎng)、工業(yè)現(xiàn)場(chǎng)、學(xué)校機(jī)房搞C開(kāi)發(fā)的兄弟一定都體會(huì)過(guò)這種痛苦機(jī)器物理隔離U盤(pán)要過(guò)審?fù)饩W(wǎng)下載一次VS要幾個(gè)小時(shí)結(jié)果到了內(nèi)網(wǎng)一安裝安裝器對(duì)著一個(gè)空目錄干瞪眼。Visual Studio 2019的離線(xiàn)安裝說(shuō)白了就是提前在有網(wǎng)機(jī)器上把整個(gè)安裝源layout拉下來(lái)再整個(gè)搬到內(nèi)網(wǎng)但這里面藏著大量細(xì)節(jié)證書(shū)、組件清單、靜默參數(shù)、運(yùn)行庫(kù)順序任何一個(gè)環(huán)節(jié)錯(cuò)了都會(huì)讓你白折騰一整天。這篇文章我直接給出一套保姆級(jí)方案從有網(wǎng)電腦下載離線(xiàn)包開(kāi)始到內(nèi)網(wǎng)機(jī)器靜默安裝再到C環(huán)境驗(yàn)證全流程帶參數(shù)、帶截圖說(shuō)明、帶坑點(diǎn)記錄。適合從來(lái)沒(méi)搞過(guò)離線(xiàn)部署的新手也適合已經(jīng)裝過(guò)但想整理出一套標(biāo)準(zhǔn)流程的運(yùn)維/開(kāi)發(fā)同學(xué)。我盡量把每一個(gè)“為什么”都講明白而不只是甩給你一條命令。1. 離線(xiàn)安裝的核心思路與準(zhǔn)備工作1.1 先搞明白VS2019的安裝機(jī)制你才不會(huì)一頭霧水Visual Studio的安裝器和普通人理解的不太一樣。你下載的那個(gè)vs_community.exe并不是完整的安裝包它只是一個(gè)幾十MB的“引導(dǎo)器”bootstrapper體積小到會(huì)讓你懷疑人生。真正干活的時(shí)候這個(gè)引導(dǎo)器會(huì)根據(jù)你勾選的組件實(shí)時(shí)去微軟的CDN拉取幾百M(fèi)B甚至幾個(gè)GB的實(shí)際文件。這也是為什么內(nèi)網(wǎng)環(huán)境直接雙擊vs_community.exe會(huì)卡死在“正在準(zhǔn)備”或者“下載中”的界面——因?yàn)閮?nèi)網(wǎng)機(jī)器根本連不上微軟的下載服務(wù)器。離線(xiàn)安裝的核心思路就一句話(huà)在外面有網(wǎng)的機(jī)器上用這個(gè)引導(dǎo)器把需要的組件全部下載到本地硬盤(pán)生成一個(gè)完整的離線(xiàn)安裝源然后把整個(gè)文件夾拷進(jìn)內(nèi)網(wǎng)用同樣的引導(dǎo)器指著這個(gè)本地目錄進(jìn)行安裝。微軟官方管這個(gè)機(jī)制叫“l(fā)ayout布局”聽(tīng)起來(lái)玄乎其實(shí)就是把緩存目錄當(dāng)安裝源。搞明白這一點(diǎn)后面所有參數(shù)都好理解了。你在命令行里敲的那些--layout、--add、--includeRecommended本質(zhì)上都是在告訴引導(dǎo)器“幫我下載這些東西到一個(gè)文件夾”。1.2 你可能需要的物料清單在動(dòng)手之前先把該準(zhǔn)備的軟件文件列個(gè)清單免得中途到處找引導(dǎo)器安裝包vs_community.exe社區(qū)版、vs_professional.exe專(zhuān)業(yè)版或vs_enterprise.exe企業(yè)版。根據(jù)公司或?qū)W校實(shí)際授權(quán)來(lái)選社區(qū)版對(duì)個(gè)人學(xué)習(xí)和小團(tuán)隊(duì)足夠用但商業(yè)項(xiàng)目要按微軟授權(quán)要求選擇版本。工作負(fù)載組件通過(guò)上面說(shuō)到的--layout命令在有網(wǎng)機(jī)器上下載這是大頭通常有幾個(gè)GB。系統(tǒng)運(yùn)行庫(kù)Microsoft Visual C Redistributable 2015-2022 的 x86 和 x64 版本這個(gè)很多軟件都依賴(lài)單獨(dú)拿一份出來(lái)總沒(méi)錯(cuò)。.NET Framework 4.8 離線(xiàn)安裝包VS2019本身依賴(lài).NET環(huán)境內(nèi)網(wǎng)機(jī)器如果系統(tǒng)較舊需要先打上。U盤(pán)或移動(dòng)硬盤(pán)建議至少準(zhǔn)備64GB如果你要裝全套C桌面開(kāi)發(fā)加上游戲開(kāi)發(fā)組件20GB到40GB很常見(jiàn)。用exFAT或NTFS格式。1.3 版本選型Community、Professional還是Enterprise內(nèi)網(wǎng)環(huán)境選版本要特別注意。Community版社區(qū)版對(duì)個(gè)人開(kāi)發(fā)者免費(fèi)但有些單位的環(huán)境會(huì)要求專(zhuān)業(yè)版或企業(yè)版因?yàn)樯鐓^(qū)版在大型企業(yè)內(nèi)使用有授權(quán)限制。這里不展開(kāi)授權(quán)法務(wù)問(wèn)題只說(shuō)技術(shù)層面的區(qū)別三個(gè)版本的引導(dǎo)器不同但離線(xiàn)安裝方法和參數(shù)基本一樣只要把exe文件名換掉就行。另外提醒一句裝之前先確認(rèn)C開(kāi)發(fā)到底需要什么。VS2019的組件特別分散如果不勾選“使用C的桌面開(kāi)發(fā)”工作負(fù)載光裝個(gè)基礎(chǔ)IDE你連cl.exe編譯器都找不到寫(xiě)了一堆C代碼也沒(méi)法編譯。后面我會(huì)給一份面向C開(kāi)發(fā)的組件清單照著抄就行。2. 在有網(wǎng)電腦上生成離線(xiàn)安裝包這一步?jīng)Q定了你后面少走多少?gòu)澛?.1 核心命令--layout 的完整打開(kāi)方式有網(wǎng)電腦上首先把引導(dǎo)器比如vs_community.exe放到一個(gè)空目錄然后用管理員身份打開(kāi)命令提示符CMD或PowerShell都行敲下面這行命令vs_community.exe --layout D:\vs2019_offline --add Microsoft.VisualStudio.Workload.NativeDesktop --includeRecommended --lang zh-CN逐個(gè)參數(shù)拆解--layout D:\vs2019_offline指定離線(xiàn)安裝源的存放路徑。建議放到空間充足的盤(pán)后面你還會(huì)反復(fù)用到這個(gè)目錄。--add Microsoft.VisualStudio.Workload.NativeDesktop指定要下載的工作負(fù)載?!癗ativeDesktop”就是“使用C的桌面開(kāi)發(fā)”對(duì)應(yīng)VS安裝器里的那一大塊勾選區(qū)域。--includeRecommended下載該工作負(fù)載下的推薦組件。如果追求體積小可以不加這個(gè)參數(shù)但為了后續(xù)少折騰我建議加。--lang zh-CN下載簡(jiǎn)體中文語(yǔ)言包。想要英文界面就把這個(gè)換成en-US或者干脆不寫(xiě)界面語(yǔ)言會(huì)在安裝時(shí)自動(dòng)匹配系統(tǒng)語(yǔ)言。需要注意的是--layout這條命令只負(fù)責(zé)把文件下載到本地不會(huì)開(kāi)始安裝Visual Studio。下載時(shí)間取決于你的網(wǎng)絡(luò)和選擇的組件C桌面開(kāi)發(fā)全量套餐一般30分鐘到2小時(shí)不等中間斷網(wǎng)可以重新跑它會(huì)斷點(diǎn)續(xù)傳。2.2 C開(kāi)發(fā)場(chǎng)景的組件清單推薦如果你的需求不只是桌面應(yīng)用下面的組件ID可以加到上一條命令里多條--add反復(fù)追加即可開(kāi)發(fā)場(chǎng)景組件ID說(shuō)明通用Windows桌面應(yīng)用Microsoft.VisualStudio.Workload.NativeDesktop最核心的C桌面開(kāi)發(fā)必裝Windows應(yīng)用商店/UWP開(kāi)發(fā)Microsoft.VisualStudio.Workload.Universal如果涉及WinUI或UWP才需要Linux遠(yuǎn)程C開(kāi)發(fā)Microsoft.VisualStudio.Workload.NativeCrossPlat用VS寫(xiě)Linux程序時(shí)用得上游戲開(kāi)發(fā)CMicrosoft.VisualStudio.Workload.NativeGame基于DirectX的游戲開(kāi)發(fā)組件Python原生擴(kuò)展Microsoft.VisualStudio.Component.Python如果要在VS里混合寫(xiě)Python/C普通情況下我只推薦NativeDesktop加--includeRecommended就夠了。因?yàn)槟愫竺鎸?duì)需求不明確時(shí)這套默認(rèn)組合已經(jīng)覆蓋了MSVC編譯器、Windows SDK、CMake工具、測(cè)試工具等一整套。組件的ID如果你記不全也沒(méi)關(guān)系??梢栽谟芯W(wǎng)機(jī)器上先運(yùn)行vs_community.exe打開(kāi)圖形界面把所有需要的勾選好然后看右下角“安裝位置”下面的“下載到緩存”選項(xiàng)它會(huì)引導(dǎo)你生成一個(gè)同樣的離線(xiàn)布局不過(guò)命令行方式對(duì)以后批量部署更友好。2.3 下載完成后的文件檢查與壓縮搬運(yùn)技巧下載完成后在D:\vs2019_offline目錄下你應(yīng)該能看到vs_community.exe Contents/ 目錄里面是JSON清單文件 Packages/ 目錄緩存的所有組件安裝包Packages目錄里會(huì)有上萬(wàn)個(gè).msi、.cab、.vsix文件這是非常重要的標(biāo)志——如果這個(gè)目錄是空的或者只有幾個(gè)小文件說(shuō)明之前下載失敗過(guò)或者是命令參數(shù)不對(duì)這時(shí)不要強(qiáng)行往內(nèi)網(wǎng)搬重跑一次--layout等它補(bǔ)齊再說(shuō)。搬運(yùn)之前我強(qiáng)烈建議做兩件事對(duì)Packages目錄里最大的幾個(gè).cab文件做一次哈希校驗(yàn)。Windows下用certutil命令比如certutil -hashfile D:\vs2019_offline\Packages\某個(gè)大文件.cab SHA256把算出的哈希值和微軟官方清單Contents目錄里能找到預(yù)期值比對(duì)或者不同批次下載時(shí)記錄對(duì)比能有效防止U盤(pán)拷貝過(guò)程中文件損壞。把整個(gè)目錄壓縮成一個(gè)分卷包或者直接保持目錄結(jié)構(gòu)原樣拷到U盤(pán)。如果你打算用網(wǎng)線(xiàn)/內(nèi)網(wǎng)共享傳輸分卷壓縮到4GB以下比較穩(wěn)妥如果直接插U盤(pán)保留原目錄結(jié)構(gòu)最好因?yàn)閂S安裝器對(duì)目錄層級(jí)很敏感解壓之后路徑變了會(huì)導(dǎo)致安裝找不到緩存文件。我個(gè)人的習(xí)慣是保留原始目錄結(jié)構(gòu)不重新打包。因?yàn)榉志斫鈮喝f(wàn)一漏了一個(gè)包你又得從頭拷貝一遍。U盤(pán)足夠大的情況下原樣復(fù)制最省心。3. 內(nèi)網(wǎng)目標(biāo)機(jī)器的部署與靜默安裝全記錄3.1 最容易翻車(chē)的一步證書(shū)導(dǎo)入與系統(tǒng)依賴(lài)準(zhǔn)備到了內(nèi)網(wǎng)機(jī)器別急著雙擊安裝包。VS的離線(xiàn)安裝包里有大量驅(qū)動(dòng)、組件和擴(kuò)展是被微軟代碼簽名證書(shū)簽名的系統(tǒng)必須信任這些證書(shū)安裝過(guò)程才不會(huì)反復(fù)彈窗或者直接報(bào)錯(cuò)。在安裝目錄里的Contents子目錄下通常會(huì)有這樣的證書(shū)文件D:\vs2019_offline\Contents\Certificates\...你需要把這些.cer文件導(dǎo)入到“受信任的根證書(shū)頒發(fā)機(jī)構(gòu)”和“受信任的發(fā)布者”。命令方式如下假設(shè)證書(shū)A是根證書(shū)B(niǎo)是發(fā)行者證書(shū)certutil.exe -addstore Root 證書(shū)A.cer certutil.exe -addstore TrustedPublisher 證書(shū)B(niǎo).cer如果你不確定哪些是根證書(shū)哪些是發(fā)布者證書(shū)最簡(jiǎn)單的土辦法是右鍵證書(shū)文件查看“詳細(xì)信息”里的“使用者”和“頒發(fā)者”如果兩者相同那一般就是根證書(shū)如果“頒發(fā)者”是Microsoft Corporation那就是葉子證書(shū)導(dǎo)到TrustedPublisher就對(duì)了。證書(shū)導(dǎo)入是內(nèi)網(wǎng)安裝“翻車(chē)率”極高的地方。我在實(shí)際部署時(shí)遇到過(guò)一臺(tái)機(jī)器因?yàn)槿弊C書(shū)導(dǎo)致安裝進(jìn)行到70%時(shí)突然回滾日志一片紅重試了多少次都不行最后排查半天才發(fā)現(xiàn)是該導(dǎo)入的.cer沒(méi)導(dǎo)入。導(dǎo)入證書(shū)后檢查一下系統(tǒng)里有沒(méi)有裝好 .NET Framework 4.8。VS2019的很多組件要在.NET上運(yùn)行內(nèi)網(wǎng)Win10/Server系統(tǒng)一般自帶但如果你的內(nèi)網(wǎng)機(jī)器是舊版Windows Server 2012之類(lèi)可能得先去裝一個(gè)離線(xiàn)版.NET Framework 4.8安裝包。3.2 靜默安裝命令真正干活的現(xiàn)場(chǎng)所有準(zhǔn)備工作到位后開(kāi)始安裝。進(jìn)入D:\vs2019_offline目錄以管理員身份打開(kāi)CMD執(zhí)行vs_community.exe --installPath C:\Program Files (x86)\Microsoft Visual Studio\2019\Community --layout D:\vs2019_offline --includeRecommended --quiet --wait參數(shù)說(shuō)明--installPathVS安裝的目標(biāo)目錄。盡量別改回默認(rèn)改來(lái)改去容易出權(quán)限問(wèn)題。--layout D:\vs2019_offline這是關(guān)鍵中的關(guān)鍵告訴安裝器“我不要去網(wǎng)上找就從本地這個(gè)目錄加載”。不帶這個(gè)參數(shù)安裝器依然會(huì)嘗試聯(lián)網(wǎng)內(nèi)網(wǎng)機(jī)器就會(huì)卡死。--quiet靜默模式不彈界面安裝日志會(huì)寫(xiě)入%temp%目錄。如果你想看進(jìn)度去掉這個(gè)參數(shù)使用圖形界面手動(dòng)點(diǎn)下一步我實(shí)測(cè)兩者安裝結(jié)果一致但靜默模式適合批量裝機(jī)。--wait讓CMD等待安裝結(jié)束并返回退出碼而不是立刻彈出命令行。這個(gè)參數(shù)在做腳本化部署時(shí)很重要否則腳本執(zhí)行完你以為裝好了其實(shí)后臺(tái)還在跑。執(zhí)行后就可以去泡杯茶了。安裝C桌面開(kāi)發(fā)全量組件大概20到40分鐘取決于機(jī)器性能。期間你可以打開(kāi)任務(wù)管理器看到vs_installer.exe和一堆子進(jìn)程在跑CPU占用忽高忽低屬正常。3.3 安裝驗(yàn)證用vswhere和第一個(gè)C程序說(shuō)話(huà)安裝結(jié)束后先看一下退出碼。在CMD里執(zhí)行echo %ERRORLEVEL%返回0基本就是成功。如果返回非0去%temp%\dd_setup_errors.txt或者C:\ProgramData\Microsoft\VisualStudio\Packages\_Instances下面翻日志。然后驗(yàn)證VS是否被系統(tǒng)正確識(shí)別。打開(kāi)新的CMD執(zhí)行C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe -all -products \* -format jsonvswhere是官方提供的VS實(shí)例查找工具如果它輸出的JSON里能認(rèn)出你剛裝的實(shí)例說(shuō)明裝好了。最后寫(xiě)個(gè)C程序試編譯。在某個(gè)工作目錄新建hello.cpp#include iostream int main() { std::cout Hello from intranet C! std::endl; return 0; }然后打開(kāi)“開(kāi)發(fā)者命令提示符”開(kāi)始菜單里搜“Developer Command Prompt for VS 2019”或者自己設(shè)置環(huán)境變量后執(zhí)行cl /EHsc hello.cpp hello.exe能打印出Hello from intranet C!就說(shuō)明離線(xiàn)C編譯環(huán)境徹底通了。4. 離線(xiàn)C運(yùn)行庫(kù)與后續(xù)組件管理4.1 VC Redistributable 2015-2022 合并包的離線(xiàn)安裝順序其實(shí)到了這一步C編譯器已經(jīng)能用了但很多從網(wǎng)上下載的Windows程序比如一些第三方庫(kù)打包的exe、部分工業(yè)軟件運(yùn)行時(shí)還依賴(lài)系統(tǒng)級(jí)的Microsoft Visual C Redistributable。這個(gè)運(yùn)行庫(kù)不是VS安裝器自動(dòng)幫你裝好的需要單獨(dú)處理。微軟官方已經(jīng)合并且統(tǒng)一命名為2015-2022分為x86和x64兩種。注意64位系統(tǒng)上兩個(gè)都要裝。因?yàn)楹芏喑绦蚴?2位編譯的只裝x64的話(huà)會(huì)無(wú)法啟動(dòng)。靜默安裝的命令隨手記一下vc_redist.x86.exe /install /quiet /norestart vc_redist.x64.exe /install /quiet /norestart/norestart參數(shù)是不在安裝后強(qiáng)制重啟避免裝完直接彈重啟界面打斷你的部署流程。4.2 通過(guò)已有布局目錄做組件增補(bǔ)內(nèi)網(wǎng)機(jī)器已裝好VS之后發(fā)現(xiàn)還需要加裝其他組件怎么辦不用重新把整個(gè)包再拉一遍也用不著把機(jī)器重新部署。把之前用的D:\vs2019_offline那個(gè)布局目錄當(dāng)增量緩存的“原料庫(kù)”再次執(zhí)行vs_community.exe --layout D:\vs2019_offline --add Microsoft.VisualStudio.Component.VC.Tools.x86.x64 --includeRecommended這個(gè)命令在有網(wǎng)機(jī)器上會(huì)把新增組件下載到同一個(gè)D:\vs2019_offline目錄里原有文件不會(huì)重復(fù)下載。然后你把這個(gè)增量部分更新到內(nèi)網(wǎng)再執(zhí)行安裝命令vs_community.exe --installPath C:\Program Files (x86)\Microsoft Visual Studio\2019\Community --layout D:\vs2019_offline --add Microsoft.VisualStudio.Component.VC.Tools.x86.x64 --quiet增量安裝比全量安裝要快得多。但有一條必須記住內(nèi)網(wǎng)機(jī)器的布局目錄必須與有網(wǎng)機(jī)器上下載后的布局目錄完全同步至少新增組件對(duì)應(yīng)的Packages文件要拷過(guò)去否則安裝器找不到文件會(huì)嘗試聯(lián)網(wǎng)失敗。4.3 內(nèi)網(wǎng)開(kāi)發(fā)環(huán)境選型VS2019之外還有沒(méi)有別的選擇雖然這篇文章的主角是VS2019但我還是多句嘴如果你只是要C編譯環(huán)境而且內(nèi)網(wǎng)機(jī)器性能一般VSCode配MinGW-w64或者DevC也是一種很輕量的離線(xiàn)方案MinGW-w64壓縮包不過(guò)幾百M(fèi)BU盤(pán)一拷就能用。但要是項(xiàng)目依賴(lài)MSVC特性、Windows SDK、MFC、ATL這些東西或者團(tuán)隊(duì)要用VS工程格式.sln/.vcxproj那你只能在VS2019系列里選。另外提醒VS2022的離線(xiàn)安裝機(jī)制和2019基本一樣但現(xiàn)在不少老項(xiàng)目還在用2019工具集所以這篇文章的方法在2022上同樣可以套用只需要把安裝包文件名和部分Workload ID換掉。5. 常見(jiàn)問(wèn)題與排查技巧實(shí)錄5.1 安裝卡在“正在準(zhǔn)備”或“下載中0%”這個(gè)現(xiàn)象90%的情況是安裝命令里漏了--layout參數(shù)或者--layout指向的目錄是空的/不完整的。內(nèi)網(wǎng)機(jī)器無(wú)法訪(fǎng)問(wèn)微軟服務(wù)器安裝器會(huì)反復(fù)嘗試聯(lián)網(wǎng)然后超時(shí)。處理辦法確認(rèn)你執(zhí)行安裝命令時(shí)所在目錄確實(shí)是布局根目錄。查看Packages目錄是否是空的。如果確認(rèn)布局沒(méi)問(wèn)題檢查系統(tǒng)代理設(shè)置。有些內(nèi)網(wǎng)機(jī)器的IE代理是壞掉的VS安裝器會(huì)嘗試走系統(tǒng)代理導(dǎo)致卡住??梢匀ァ翱刂泼姘濉鶬nternet選項(xiàng)→連接→局域網(wǎng)設(shè)置”把代理關(guān)掉或者讓安裝命令跳過(guò)代理。5.2 安裝過(guò)程中突然回滾日志里有“證書(shū)”關(guān)鍵字這種情況我在3.1節(jié)里強(qiáng)調(diào)過(guò)大概率是證書(shū)沒(méi)導(dǎo)入完整。VS的離線(xiàn)安裝源里有很多微軟簽名的組件只要系統(tǒng)不信任簽名證書(shū)安裝器就會(huì)判定為不可信然后執(zhí)行回滾。解決辦法是重新把所有.cer文件導(dǎo)到Root和TrustedPublisher然后重新運(yùn)行安裝命令。另外如果你發(fā)現(xiàn)日志里報(bào)“無(wú)法驗(yàn)證簽名”之類(lèi)的錯(cuò)誤也可能是拷貝過(guò)程中文件損壞。把對(duì)應(yīng)報(bào)錯(cuò)文件重新從有網(wǎng)機(jī)器拷貝一次或者重新執(zhí)行一次--layout增量修復(fù)。5.3 安裝成功但找不到cl.exe或MSVC編譯器如果VS圖形界面能打開(kāi)但命令行里cl沒(méi)反應(yīng)注意你用的是不是“開(kāi)發(fā)者命令提示符”。普通CMD不會(huì)自動(dòng)加載VS環(huán)境變量需要執(zhí)行vcvarsall.batcall C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvarsall.bat x64如果vcvarsall.bat都不存在說(shuō)明安裝時(shí)C工作負(fù)載根本沒(méi)裝上。要么就是你安裝時(shí)用的是簡(jiǎn)單的默認(rèn)安裝沒(méi)有在--add里指定Microsoft.VisualStudio.Workload.NativeDesktop。只能重新做增量安裝補(bǔ)上。5.4 磁盤(pán)空間不足與路徑帶中文名的問(wèn)題離線(xiàn)包加安裝后的VS總體占用很容易超過(guò)30GB。部署前一定先確認(rèn)內(nèi)網(wǎng)機(jī)器的C盤(pán)和布局目錄所在盤(pán)剩余空間充足。另外盡量把布局目錄放在純英文路徑下。我踩過(guò)這樣的坑某臺(tái)機(jī)器用戶(hù)名是中文導(dǎo)致臨時(shí)目錄路徑里帶中文VS安裝器在解析部分組件時(shí)直接報(bào)錯(cuò)無(wú)響應(yīng)。如果你只有中文用戶(hù)名可以考慮用set TEMPC:\Temp這種方式把臨時(shí)目錄切到純英文路徑再跑安裝命令。5.5 裝完VS后發(fā)現(xiàn)某些組件是壞的怎么辦內(nèi)網(wǎng)環(huán)境下沒(méi)辦法用在線(xiàn)修復(fù)功能但可以先把布局目錄中有問(wèn)題的組件重新下載。實(shí)際操作中我會(huì)刪除Packages目錄里對(duì)應(yīng)的包文件然后在有網(wǎng)機(jī)器上重新跑一次帶相同--add參數(shù)的--layout命令它會(huì)重新拉取缺失文件再把增量同步到內(nèi)網(wǎng)最后在目標(biāo)機(jī)上執(zhí)行修復(fù)安裝vs_community.exe --installPath C:\Program Files (x86)\Microsoft Visual Studio\2019\Community --layout D:\vs2019_offline --repair --quiet--repair參數(shù)也是從本地布局讀取文件執(zhí)行的整個(gè)過(guò)程不需要互聯(lián)網(wǎng)。這也是離線(xiàn)布局方案的最大價(jià)值一旦擁有永久可用。最后再分享一個(gè)我個(gè)人的小習(xí)慣每次做離線(xiàn)部署前都會(huì)把有網(wǎng)機(jī)器上下載好的整個(gè)布局目錄做一份SHA256完整清單可以用get-filehash批量生成拷貝到內(nèi)網(wǎng)后先抽查幾個(gè)文件哈希是否一致再開(kāi)始安裝。另外記得給U盤(pán)做個(gè)標(biāo)簽寫(xiě)上生成日期和包含的組件ID防止過(guò)了一個(gè)月自己都想不起來(lái)這個(gè)離線(xiàn)包到底能不能裝MFC。這套方法我已經(jīng)在十幾臺(tái)內(nèi)網(wǎng)機(jī)器上驗(yàn)證過(guò)按順序操作基本不會(huì)出現(xiàn)“裝到一半回調(diào)”的糟心事。