WSL 在 ARM64 Windows 上构建时 WiX 工具集缺少 x64 .NET 6.0 运行时怎么解决?
【免费下载链接】WSLWindows Subsystem for Linux项目地址: https://gitcode.com/GitHub_Trending/ws/WSL
在 ARM64 Windows 机器上构建 WSL 时,构建流程需要调用 WiX 工具集(wix.exe)来打安装包。wix.exe是 x64 二进制,它需要x64 的 .NET 6.0 运行时才能工作;机器上只有 ARM64 的 .NET 运行时是不够的。遇到这个情况时,按本文操作:安装 x64 .NET 6.0 运行时,并设置DOTNET_ROOT_X64让运行时可被发现,然后重新执行 ARM64 构建即可。以下内容依据仓库文档 Building WSL 整理。
先确认是不是这个问题
出现该问题的前提和判断依据(来自 dev-loop.md 的 “ARM64 development” 一节):
- 你在ARM64 Windows上构建 WSL(例如使用
cmake . -A arm64生成 ARM64 包); - 构建过程由
wix.exe执行打包,而wix.exe是 x64 二进制; - 机器上未安装 x64 .NET 6.0 运行时,或者设置了 x64 运行时但没有配置
DOTNET_ROOT_X64导致运行时不可发现。
如果是在 x64 Windows 上构建,不属于本文场景。
准备条件
修复本身不改变构建前置条件,先按 dev-loop.md 的要求确认这些依赖已就位:
- CMake >= 3.25(可用
winget install Kitware.CMake安装) - Visual Studio 2022 及其所需组件(可用 VS Installer 导入
.vsconfig配置) - Windows 设置中启用 Developer Mode,或者以管理员权限运行构建(符号链接支持需要)
这些前置条件也可以用一条脚本自动安装(该脚本通过 WinGet Configuration 安装 Developer Mode、CMake、Visual Studio 2022 及.vsconfig中要求的组件):
tools\setup-dev-env.ps1安装 x64 .NET 6.0 运行时
在 PowerShell 中执行以下两条命令。先说明副作用:第一条命令从https://dot.net/v1/dotnet-install.ps1下载官方 dotnet-install 脚本到临时目录,属于网络下载;第二条命令执行该脚本,把 x64 .NET 6.0 运行时安装到C:\Program Files\dotnet\x64,会向系统目录写入文件。
# Download the official dotnet-install script Invoke-WebRequest -Uri "https://dot.net/v1/dotnet-install.ps1" -OutFile "$env:TEMP\dotnet-install.ps1" # Install the x64 .NET 6.0 runtime powershell -ExecutionPolicy Bypass -File "$env:TEMP\dotnet-install.ps1" -Channel 6.0 -Runtime dotnet -Architecture x64 -InstallDir "C:\Program Files\dotnet\x64"其中-Channel 6.0指定 .NET 6.0 版本线,-Runtime dotnet表示安装 .NET 运行时,-Architecture x64指定 x64 架构,-InstallDir指定安装目录。
设置 DOTNET_ROOT_X64 让运行时可被发现
安装完成后,设置DOTNET_ROOT_X64环境变量指向运行时安装目录。该命令会修改当前会话或当前用户的环境变量:
# Set for the current session $env:DOTNET_ROOT_X64 = "C:\Program Files\dotnet\x64" # Set permanently for your user [System.Environment]::SetEnvironmentVariable("DOTNET_ROOT_X64", "C:\Program Files\dotnet\x64", "User")注意两点:
DOTNET_ROOT_X64的值必须与上一步-InstallDir使用的目录一致(上例中均为C:\Program Files\dotnet\x64)。如果你自定义了安装目录,两处都要改成同一目录。- 设置后可能需要重启 VS Code 或打开一个新终端,环境变量才会生效。
重新构建并验证
回到 WSL 仓库根目录,重新配置并构建 ARM64 包:
cmake . -A arm64 cmake --build .也可以打开cmake .生成的wsl.sln,在 Visual Studio 中构建。构建完成后按以下方式验证:
- 检查安装包是否生成:构建完成后 WSL 的 MSI 位于
bin\<platform>\<target>\wsl.msi,在 ARM64 机器上 platform 段为arm64(文档中测试示例显示 target 段形如debug,例如bin\x64\debug\test.bat)。该文件生成说明 WiX 打包环节已经正常工作。 - 安装验证:直接安装该 MSI,或运行
powershell tools\deploy\deploy-to-host.ps1部署到本机。
限制与补充
-DCMAKE_BUILD_TYPE=Release用于 Release 构建,需与cmake --build . --config Release配合使用;- 如果需要构建 bundle msix 包(
-DBUILD_BUNDLE=TRUE),文档要求先完成 ARM64 构建,即先跑通本文这条路径; - 文档没有给出该故障的具体报错文本,判断依据是 “
wix.exe为 x64 二进制、需要 x64 .NET 6.0 运行时、仅 ARM64 运行时不够” 这一说明;如果你确认运行时已安装到C:\Program Files\dotnet\x64且DOTNET_ROOT_X64已在新终端中生效,问题仍未解决,则超出了文档覆盖的范围,需要进一步自行排查。
【免费下载链接】WSLWindows Subsystem for Linux项目地址: https://gitcode.com/GitHub_Trending/ws/WSL
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考