
简介这份资源面向在 Windows Server 2012 R2 及云服务器环境中部署 .NET Framework 3.5 受阻的运维与开发人员针对系统提示找不到源文件、要求通过“源”选项指定还原文件位置等典型报错提供一套亲测有效的离线安装与修复方案。压缩包共 1568 个文件约 99.19MB以 720 个 dll 动态库、180 个 resx 资源文件、84 个 exe 可执行程序为主并包含 aspx、config、sql、browser、ini、tlb、targets 等配置与组件文件覆盖安装源、组件注册及服务配置等环节便于直接挂载或指定为本地源使用。目前已有 10327 人学习下载说明该方案在同类场景中认可度较高。读者可据此绕过在线源缺失限制完成 .NET 3.5 功能还原并为 SQL Server 等依赖组件的后续部署扫清环境障碍。1. 一个叫 settled_.net3.5install.zip 的包到底在解决什么麻烦如果你在 Windows 上维护过老系统一定见过这种场面某台内网机器要跑一个十年前的业务程序双击图标弹出一句“需要安装 .NET Framework 3.5”点“安装此功能”又卡在下载进度条上转圈最后报 0x800F0906 或者 0x800F081F。settled_.net3.5install.zip这类命名本质上就是有人把“离线装 .NET 3.5”这件事打包成了一个可复用的方案——settled_是“已解决”的意思.net3.5install是目标.zip是载体。它要解决的不是“怎么下载”而是“在没网、被策略限制、或者系统镜像里缺组件的机器上怎么把 .NET 3.5 装进去”。适合谁做企业内网运维的、给工厂老设备做维护的、以及被“程序 install and uninstall troubleshooter 修不好”折磨过的开发者。这一章先把这件事的边界说清楚后面几章再拆具体怎么落地。.NET 3.5 和现在的 .NET 8、.NET 9 不是一回事。它是 .NET Framework 的一个版本和 Windows 组件深度绑定安装方式走的是 DISM 或“启用 Windows 功能”那条路而不是像 .NET Core 那样解压即用。所以settled_.net3.5install.zip里通常不会是一个 exe 安装器而是一份sxs文件夹或者一份microsoft-windows-netfx3-ondemand-package的 cab 包配合一个批处理脚本。热词里频繁出现的“怎么查 net 运行库”“microsoft .net packages aio”其实都指向同一个需求先确认机器上到底有没有、缺哪个版本再决定装什么。这一章不写命令只把“为什么需要这个 zip”讲透下一章开始动手。2. 先搞清楚 .NET 3.5 的安装机制为什么不能直接双击 exe2.1 按需功能On-Demand和离线源的关系Windows 8 以后.NET 3.5 被定义为“按需功能”Feature on Demand。系统镜像里默认只放一个占位符真正的二进制文件放在sxs目录或者独立的 cab 包里。当你点“启用 .NET Framework 3.5”时系统会去 Windows Update 拉取对应版本的组件。问题就出在这里内网机器连不上 Windows Update或者组策略把这条通道关了于是安装失败。settled_.net3.5install.zip的核心价值就是把那个“离线源”提前准备好让 DISM 从本地路径取文件而不是走网络。常见做法是从同版本 Windows 的安装 ISO 里提取sources\sxs文件夹或者直接下载microsoft-windows-netfx3-ondemand-package~31bf3856ad364e35~amd64~~.cab。注意cab 包的架构必须和系统一致x64 系统装 x86 的包会报错。热词里“需要 vmware install disk 上的文件.dll”也是类似逻辑——安装程序在找源文件找不到就报缺文件。2.2 用 DISM 挂载离线源的最小命令假设你已经把sxs文件夹放到了D:\sxs以管理员身份打开 CMD 或 PowerShell执行dism /online /enable-feature /featurename:NetFx3 /All /Source:D:\sxs /LimitAccess这条命令的含义逐段拆/online表示操作当前运行的系统不是离线镜像/featurename:NetFx3是 .NET 3.5 的功能名注意不是 NetFx35/All会一并启用父功能/Source:D:\sxs指定本地源路径/LimitAccess是关键它阻止 DISM 回退到 Windows Update强制只用本地源。少了/LimitAccessDISM 可能仍然尝试联网然后超时失败。参数说明/Source路径下必须有sxs子目录结构直接指向sxs文件夹本身不要指到 cab 文件。如果报“源文件找不到”先确认路径里有没有microsoft-windows-netfx3-ondemand-package.cab。执行成功后用dism /online /get-featureinfo /featurename:NetFx3查看状态State 显示 Enabled 才算真正装上。2.3 从 zip 到可用源的整理步骤拿到settled_.net3.5install.zip后不要直接双击里面的 exe。先解压到一个短路径比如D:\net35避免中文路径和空格。然后检查目录结构通常会有sxs文件夹和install.bat。如果没有sxs只有 cab 文件需要手动建一个sxs文件夹把 cab 放进去。接着用管理员权限运行脚本或者手动执行上面的 DISM 命令。这一步的坑在于很多人解压到桌面路径带用户名中文DISM 读源时直接报 0x800f081f查半天以为是包坏了其实是路径问题。提示如果系统是 Windows 7 或更早版本DISM 的/online参数不支持需要用dism /image挂载或者直接运行NetFx35.exe这是另一套流程别混用。3. 在 Windows 10/11 上复现从解压到验证的完整链路3.1 确认系统版本和已有运行库动手前先查清楚现状避免白装。打开 PowerShell执行Get-WindowsOptionalFeature -Online -FeatureName NetFx3输出里 State 如果是 Disabled说明没装如果是 Enabled说明已经装了不用再折腾。再看注册表确认版本reg query HKLM\SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5 /v Install返回Install REG_DWORD 0x1表示已安装。热词里“怎么查 net 运行库”问的就是这一步。如果机器上同时有 .NET 4.x不冲突3.5 和 4.x 是并行共存的各自独立。3.2 解压 zip 并定位 sxs 源用资源管理器右键解压或者用命令行tar -xf settled_.net3.5install.zip -C D:\net35Windows 10 1803 以后自带tar能解 zip。解压后dir D:\net35看内容。正常应该看到sxs文件夹里面至少有一个 cab 文件大小在 100MB 上下。如果只有几十 KB说明是占位符不是完整包装了也会失败。这一步的验证方法右键 cab 文件看属性数字签名里应该有 Microsoft 字样。3.3 执行安装并处理常见返回码管理员 CMD 里跑dism /online /enable-feature /featurename:NetFx3 /All /Source:D:\net35\sxs /LimitAccess返回码含义0x800F0906 表示源文件缺失或版本不匹配0x800F081F 表示找不到源路径0x800F0922 通常是系统保留分区空间不足。遇到 0x800F0906先核对 cab 包版本和系统 build 号是否对应比如 22H2 的包不能用在 21H2 上。遇到 0x800F081F检查路径拼写和权限用dir D:\net35\sxs确认文件真的在。安装完成后重启一次然后跑一个依赖 .NET 3.5 的老程序验证。如果程序能正常启动说明链路通了。如果还报错用Get-WindowsOptionalFeature再看一次状态确认不是被组策略回滚。3.4 用批处理把流程固化下来手动敲命令容易漏参数建议把逻辑写进install.batecho off set SXS%~dp0sxs if not exist %SXS% ( echo 找不到 sxs 文件夹请确认解压完整 exit /b 1 ) dism /online /enable-feature /featurename:NetFx3 /All /Source:%SXS% /LimitAccess if %errorlevel% neq 0 ( echo 安装失败错误码 %errorlevel% exit /b %errorlevel% ) echo 安装完成建议重启%~dp0取脚本所在目录这样不管解压到哪都能找到sxs。errorlevel判断让失败时能立刻看到返回码不用去翻日志。这个脚本适合放进settled_.net3.5install.zip里作为默认入口比让用户手动敲命令靠谱得多。4. 避坑与排查装 .NET 3.5 时最容易翻车的 5 个点4.1 现象报 0x800F0906提示“源文件找不到”原因cab 包版本和系统 build 不匹配或者sxs文件夹里放的是 x86 包而系统是 x64。解决用winver查系统版本去对应 ISO 里提取sxs别从别的机器随便拷。x64 系统必须用 amd64 的 cab。4.2 现象DISM 卡在 20% 很久然后失败原因/LimitAccess没加DISM 在尝试联网但网络被墙或者 WSUS 策略拦截。解决确认命令里有/LimitAccess并且组策略里“指定 Windows 更新源位置”没有强制指向一个不可达的服务器。4.3 现象安装成功但程序仍报“需要 .NET 3.5”原因程序是 32 位的但只装了 64 位组件或者程序清单要求的是 3.5 SP1 而装的是 RTM。解决用corflags查程序位数确认sxs里同时包含 x86 和 x64 的 cab或者直接装完整版NetFx35.exe。4.4 现象解压后运行脚本一闪而过原因脚本没有以管理员权限运行DISM 直接拒绝。解决右键install.bat选“以管理员身份运行”或者在脚本开头加net session nul 21 || (echo 请用管理员运行 pause exit)。4.5 现象装完后系统更新又把它卸了原因某些企业 WSUS 策略会把 .NET 3.5 标记为“不需要”并回滚。解决在组策略里把 NetFx3 加入例外或者用dism /online /disable-feature先关再开强制刷新状态。这个坑最隐蔽血泪经验是装完先跑一周再交付。5. 进阶把离线包做成可复用镜像和自动化检测5.1 用 cab 包自制精简版 sxs 源如果你手头只有 cab 文件没有完整 ISO可以自己搭sxs结构。建一个文件夹D:\net35\sxs把microsoft-windows-netfx3-ondemand-package~31bf3856ad364e35~amd64~~.cab放进去DISM 就能识别。注意文件名里的架构标识不能改改了 DISM 不认。这个方法的局限是只适用于同 build 的系统跨版本会报 0x800F0906。5.2 用 PowerShell 做批量检测和安装内网机器多的时候一台台手动装不现实。写一个检测脚本$feature Get-WindowsOptionalFeature -Online -FeatureName NetFx3 if ($feature.State -ne Enabled) { Write-Host 未安装开始离线安装 dism /online /enable-feature /featurename:NetFx3 /All /Source:D:\net35\sxs /LimitAccess } else { Write-Host 已安装跳过 }这个脚本可以配合远程执行工具批量推。关键点是Get-WindowsOptionalFeature在 PowerShell 5.1 里就能用不需要额外模块。如果返回 State 是EnablePending说明有挂起的重启先重启再装。5.3 验证安装是否真正生效的三种方法第一种查注册表HKLM\SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5的 Install 值。第二种跑dism /online /get-featureinfo /featurename:NetFx3看 State。第三种最实在的找一个依赖 .NET 3.5 的 exe 直接双击能起来就是真的好了。三种方法结果不一致时以第三种为准因为前两种可能被策略欺骗。5.4 一个我常用的习惯每次交付前我会在虚拟机里先跑一遍完整流程全新系统、断网、解压 zip、执行脚本、重启、验证。只有虚拟机里过了才敢推到生产。这个习惯帮我挡掉过至少三次“路径带中文导致 DISM 失败”的问题。settled_.net3.5install.zip这种包价值不在文件本身而在它背后那条被验证过的路径。希望帮到你。本文还有配套的精品资源点击获取