diff --git a/global.json b/global.json index bd19f150ac5bcb..2d06ddfdaa2349 100644 --- a/global.json +++ b/global.json @@ -2,7 +2,12 @@ "sdk": { "version": "11.0.100-preview.3.26170.106", "allowPrerelease": true, - "rollForward": "major" + "rollForward": "major", + "paths": [ + ".dotnet", + "$host$" + ], + "errorMessage": "The required .NET SDK wasn't found. Please run ./eng/common/dotnet.sh (Unix) or eng\\common\\dotnet.cmd (Windows) to install it." }, "tools": { "dotnet": "11.0.100-preview.3.26170.106" diff --git a/src/mono/nuget/Microsoft.NET.Runtime.WorkloadTesting.Internal/Sdk/WorkloadTesting.Core.targets b/src/mono/nuget/Microsoft.NET.Runtime.WorkloadTesting.Internal/Sdk/WorkloadTesting.Core.targets index aa817442bf6cd9..c8a742387b7183 100755 --- a/src/mono/nuget/Microsoft.NET.Runtime.WorkloadTesting.Internal/Sdk/WorkloadTesting.Core.targets +++ b/src/mono/nuget/Microsoft.NET.Runtime.WorkloadTesting.Internal/Sdk/WorkloadTesting.Core.targets @@ -99,15 +99,22 @@ <_DotNetVersionCommand>$(_DotNetPath) --version - + + + + - - + $(SdkBandVersion)$([System.Text.RegularExpressions.Regex]::Match($(_DotNetVersionOutput), `-(?!rtm|release)[A-z]*[\.]*\d*`)) @@ -129,7 +136,8 @@ - + diff --git a/src/mono/wasi/Wasi.Build.Tests/BuildTestBase.cs b/src/mono/wasi/Wasi.Build.Tests/BuildTestBase.cs index f0963a33b6a241..e884daf8305fdf 100644 --- a/src/mono/wasi/Wasi.Build.Tests/BuildTestBase.cs +++ b/src/mono/wasi/Wasi.Build.Tests/BuildTestBase.cs @@ -148,6 +148,12 @@ protected void InitProjectDir(string dir, bool addNuGetSourceForLocalPackages = { targetFramework ??= DefaultTargetFramework; Directory.CreateDirectory(dir); + + // Create an empty global.json so the SDK resolver doesn't walk up + // to the repo root's global.json which may contain relative "paths" + // entries that don't apply in the test directory. + File.WriteAllText(Path.Combine(dir, "global.json"), "{}"); + File.WriteAllText(Path.Combine(dir, "Directory.Build.props"), s_buildEnv.DirectoryBuildPropsContents); File.WriteAllText(Path.Combine(dir, "Directory.Build.targets"), s_buildEnv.DirectoryBuildTargetsContents); File.Copy(BuildEnvironment.WasmOverridePacksTargetsPath, Path.Combine(dir, Path.GetFileName(BuildEnvironment.WasmOverridePacksTargetsPath)), overwrite: true); diff --git a/src/mono/wasm/Wasm.Build.Tests/Blazor/BlazorWasmTestBase.cs b/src/mono/wasm/Wasm.Build.Tests/Blazor/BlazorWasmTestBase.cs index 9c2ad7dfc8e59f..f60507ef843b29 100644 --- a/src/mono/wasm/Wasm.Build.Tests/Blazor/BlazorWasmTestBase.cs +++ b/src/mono/wasm/Wasm.Build.Tests/Blazor/BlazorWasmTestBase.cs @@ -90,6 +90,11 @@ public void InitBlazorWasmProjectDir(string id) Directory.Delete(_projectDir, recursive: true); Directory.CreateDirectory(_projectDir); + // Create an empty global.json so the SDK resolver doesn't walk up + // to the repo root's global.json which may contain relative "paths" + // entries that don't apply in the test directory. + File.WriteAllText(Path.Combine(_projectDir, "global.json"), "{}"); + File.WriteAllText(Path.Combine(_projectDir, "nuget.config"), GetNuGetConfigWithLocalPackagesPath( GetNuGetConfigPath(), diff --git a/src/mono/wasm/Wasm.Build.Tests/BuildTestBase.cs b/src/mono/wasm/Wasm.Build.Tests/BuildTestBase.cs index 4e993991471be5..cbec148b060fcf 100644 --- a/src/mono/wasm/Wasm.Build.Tests/BuildTestBase.cs +++ b/src/mono/wasm/Wasm.Build.Tests/BuildTestBase.cs @@ -240,6 +240,12 @@ protected void InitProjectDir(string dir, bool addNuGetSourceForLocalPackages = if (Directory.Exists(dir)) Directory.Delete(dir, recursive: true); Directory.CreateDirectory(dir); + + // Create an empty global.json so the SDK resolver doesn't walk up + // to the repo root's global.json which may contain relative "paths" + // entries that don't apply in the test directory. + File.WriteAllText(Path.Combine(dir, "global.json"), "{}"); + File.WriteAllText(Path.Combine(dir, "Directory.Build.props"), s_buildEnv.DirectoryBuildPropsContents); File.WriteAllText(Path.Combine(dir, "Directory.Build.targets"), s_buildEnv.DirectoryBuildTargetsContents); if (UseWBTOverridePackTargets) diff --git a/src/tasks/WorkloadBuildTasks/InstallWorkloadFromArtifacts.cs b/src/tasks/WorkloadBuildTasks/InstallWorkloadFromArtifacts.cs index 097be0d8484045..7e41409e8022ff 100644 --- a/src/tasks/WorkloadBuildTasks/InstallWorkloadFromArtifacts.cs +++ b/src/tasks/WorkloadBuildTasks/InstallWorkloadFromArtifacts.cs @@ -73,6 +73,12 @@ public override bool Execute() try { + // Create an empty global.json so the SDK resolver doesn't walk up to a + // parent global.json that may contain relative "paths" entries (e.g. ".dotnet"). + // Without this, the workload install invokes dotnet from a different SDK directory + // but the resolver picks up the wrong SDK from the repo-local .dotnet directory. + File.WriteAllText(Path.Combine(_tempDir, "global.json"), "{}"); + if (!Directory.Exists(SdkWithNoWorkloadInstalledPath)) throw new LogAsErrorException($"Cannot find {nameof(SdkWithNoWorkloadInstalledPath)}={SdkWithNoWorkloadInstalledPath}");