dotnet / dotnet/sdk

`dotnet restore --locked-mode` does not work as expected (the `contentHash` of `Microsoft.NET.Sdk.WebAssembly.Pack` differs on Windows)

Open
#51,675 13 comments 5 reactions 1 assignee Claimed by @MiYanni View on GitHub
Area-Workloads untriaged
Dominant language
C#
Stars
3.2k
Forks
1.3k
PR merge metrics
PR metrics pending

Description

### Describe the bug
When using `RestorePackagesWithLockFile` in a [hosted] Blazor WebAssembly project, `dotnet restore --locked-mode` fails across platforms (e.g. development on Windows, building on Linux in CI) due to `contentHash` of the `Microsoft.NET.Sdk.WebAssembly.Pack` package differing.

In my case, I do most of my development on my Windows machine, and use the `ubuntu-latest` images for my GitHub Actions- build log of the failure can be found [here](https://github.com/ESCd/wadio/actions/runs/19282747982/job/55137185323#step:6:29).

If I clone to a Linux environment (wsl), `dotnet restore --locked-mode` reproduces the error from GitHub Actions:

```
/home/cryptoc1/Developer/wadio/src/App/UI/Wadio.App.UI.csproj : error NU1403:
Package content hash validation failed for Microsoft.NET.Sdk.WebAssembly.Pack.10.0.0. The package is different tha
n the last restore.

Restore failed with 1 error(s) in 1.4s
```

When I run `dotnet restore --force-evaluate` on my Windows machine, there are no changes to commit. However, running `dotnet restore --force-evaluate` in the Linux environment changes the `contentHash` of the wasm pack:
```
diff --git a/src/App/UI/packages.lock.json b/src/App/UI/packages.lock.json
index 69d12cc..9beaab7 100644
--- a/src/App/UI/packages.lock.json
+++ b/src/App/UI/packages.lock.json
@@ -151,7 +151,7 @@
"type": "Direct",
"requested": "[10.0.0, )",
"resolved": "10.0.0",
- "contentHash": "jRA47332BBtRFmHdeIcZyssj2vplKl7/0GoaNVVQQXKFvPcpBgR5R1jTGqMyWb89skl6B6/L/uZ4WE2IEwZPJA=="
+ "contentHash": "bewqpnzRlrdGaiT4f8aSbHiKuFhm/HWKcOAgvhFpYL1OhWR0zWakDnCB67XaJ33yQKj0gsIEMl1vry6c9iGpwQ=="
},
"Microsoft.SourceLink.GitHub": {
"type": "Direct",
```

### Further technical details
details of dotnet --info (Windows)

.NET SDK:

Version: 10.0.100
Commit: b0f34d51fc
Workload version: 10.0.100.1
MSBuild version: 18.0.2+b0f34d51f

Runtime Environment:
OS Name: Windows
OS Version: 10.0.26200
OS Platform: Windows
RID: win-x64
Base Path: C:\Program Files\dotnet\sdk\10.0.100\

.NET workloads installed:
[wasm-tools]
Installation Source: SDK 10.0.100
Manifest Version: 10.0.100/10.0.100
Manifest Path: C:\Program Files\dotnet\sdk-manifests\10.0.100\microsoft.net.workload.mono.toolchain.current\10.0.100\WorkloadManifest.json
Install Type: Msi

Configured to use workload sets when installing new manifests.

Host:
Version: 10.0.0
Architecture: x64
Commit: b0f34d51fc

.NET SDKs installed:
8.0.416 [C:\Program Files\dotnet\sdk]
9.0.307 [C:\Program Files\dotnet\sdk]
10.0.100 [C:\Program Files\dotnet\sdk]

.NET runtimes installed:
Microsoft.AspNetCore.App 8.0.22 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 9.0.11 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 10.0.0 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.NETCore.App 8.0.22 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.NETCore.App 9.0.11 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.NETCore.App 10.0.0 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.WindowsDesktop.App 8.0.22 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
Microsoft.WindowsDesktop.App 9.0.11 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
Microsoft.WindowsDesktop.App 10.0.0 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]

Other architectures found:
None

Environment variables:
DOTNET_CLI_TELEMETRY_OPTOUT [1]
DOTNET_NOLOGO [1]

global.json file:
X:\wadio\global.json

Learn more:
https://aka.ms/dotnet/info

Download .NET:
https://aka.ms/dotnet/download


details of dotnet --info (Linux)


.NET SDK:

Version: 10.0.100
Commit: b0f34d51fc
Workload version: 10.0.100.1
MSBuild version: 18.0.2+b0f34d51f

Runtime Environment:
OS Name: ubuntu
OS Version: 24.04
OS Platform: Linux
RID: linux-x64
Base Path: /home/cryptoc1/.dotnet/sdk/10.0.100/

.NET workloads installed:
[wasm-tools]
Installation Source: SDK 10.0.100
Manifest Version: 10.0.100/10.0.100
Manifest Path: /home/cryptoc1/.dotnet/sdk-manifests/10.0.100/microsoft.net.workload.mono.toolchain.current/10.0.100/WorkloadManifest.json
Install Type: FileBased

[wasm-tools-net9]
Installation Source: SDK 10.0.100
Manifest Version: 10.0.100/10.0.100
Manifest Path: /home/cryptoc1/.dotnet/sdk-manifests/10.0.100/microsoft.net.workload.mono.toolchain.net9/10.0.100/WorkloadManifest.json
Install Type: FileBased

Configured to use workload sets when installing new manifests.

Host:
Version: 10.0.0
Architecture: x64
Commit: b0f34d51fc

.NET SDKs installed:
9.0.307 [/home/cryptoc1/.dotnet/sdk]
10.0.100 [/home/cryptoc1/.dotnet/sdk]

.NET runtimes installed:
Microsoft.AspNetCore.App 9.0.11 [/home/cryptoc1/.dotnet/shared/Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 10.0.0 [/home/cryptoc1/.dotnet/shared/Microsoft.AspNetCore.App]
Microsoft.NETCore.App 9.0.11 [/home/cryptoc1/.dotnet/shared/Microsoft.NETCore.App]
Microsoft.NETCore.App 10.0.0 [/home/cryptoc1/.dotnet/shared/Microsoft.NETCore.App]

Other architectures found:
None

Environment variables:
DOTNET_ROOT [/home/cryptoc1/.dotnet]

global.json file:
/home/cryptoc1/Developer/wadio/global.json

Learn more:
https://aka.ms/dotnet/info

Download .NET:
https://aka.ms/dotnet/download


Installed Software (Windows):
- VS2026
- .NET SDK: `10.0.100`, `9.0.307`, `8.0.416`
- .NET Workloads: `maui`, `wasm-tools`, `wasm-tools-net9`
- NodeJS: `v24.11.0`

Installed Software (WSL - Ubuntu 24.04)
- .NET SDK: `10.0.100`, `9.0.307`
- .NET Workloads: `wasm-tools`, `wasm-tools-net9`
- NodeJS: `v24.11.0`

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.