将Blazor WebAssembly发布到Azure App Service时遇NETSDK1147错误求助
问题描述
发布Blazor WebAssembly项目到Azure App Service时出现两类异常:
- 勾选使用AOT和发布时删除目标位置的额外文件选项时,触发报错:
"C:\Program Files\dotnet\sdk\7.0.402\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Sdk.ImportWorkloads.targets(38,5): Error NETSDK1147: To build this project, the following workloads must be installed: wasm-tools
To install these workloads, run the following command: dotnet workload restore"
- 取消AOT选项后,除上述错误外新增报错:
obj\publish\browser-wasm\project.assets.json' not found. Run a NuGet package restore to generate this file.
已执行的无效操作:
- NuGet更新项目至最新版本
- 使用Visual Studio 17.7.5
- 发布配置为:Release、.NET 7.0、独立部署、browser-wasm
- 命令行执行
dotnet workload restore显示成功 - 删除bin/obj文件夹、重新添加发布配置文件、重新生成解决方案
- 执行
dotnet restore返回**"所有项目均已为还原完成更新。"**(原英文:All projects are up-to-date for restore.)
注:同解决方案下的API项目可正常发布,且该Blazor项目此前能正常发布。
解决方案
1. 强制重装wasm-tools workload
dotnet workload restore可能未彻底修复安装异常,执行以下命令强制清理并重装对应版本的workload:
dotnet workload uninstall wasm-tools dotnet workload install wasm-tools --from-rollback-file https://dotnetcli.blob.core.windows.net/dotnet/7.0.402/rollback.json
(需确保rollback文件URL与本地SDK 7.0.402版本匹配)
2. 清理全局NuGet缓存并强制还原
project.assets.json缺失大概率是NuGet缓存异常导致,执行:
dotnet nuget locals all --clear dotnet restore --force
3. 检查Visual Studio组件安装
打开Visual Studio安装器,确认已安装**.NET WebAssembly Build Tools**组件:
- 启动Visual Studio Installer → 点击「修改」→ 切换到「单个组件」→ 搜索".NET WebAssembly Build Tools" → 勾选后完成安装
4. 手动指定Wasm工具路径(临时 workaround)
在Blazor项目的.csproj文件中添加配置,强制绑定本地已安装的Wasm工具路径:
<PropertyGroup> <WasmToolsInstallPath>C:\Program Files\dotnet\packs\Microsoft.NET.Runtime.WebAssembly.Sdk\7.0.12\Sdk</WasmToolsInstallPath> </PropertyGroup>
(路径需对应本地C:\Program Files\dotnet\packs下实际存在的Microsoft.NET.Runtime.WebAssembly.Sdk版本)
5. 验证Azure App Service运行时配置
登录Azure门户,确认目标App Service的运行时与项目匹配:
- 进入目标App Service → 「设置」→「配置」→「常规设置」→ 堆栈选择**.NET 7**,运行时版本选择ASP.NET V7
6. 尝试命令行直接发布
跳过Visual Studio的发布流程,用命令行发布排查IDE配置问题:
dotnet publish -c Release -f net7.0 -r browser-wasm --self-contained true /p:BlazorEnableAOT=true
若命令行发布成功,可重新创建Visual Studio发布配置文件。
内容的提问来源于stack exchange,提问作者purello

