From 49918a1067a710116dac558fa7ca09cee454db07 Mon Sep 17 00:00:00 2001 From: Ari Vuollet Date: Tue, 11 Nov 2025 21:59:16 +0200 Subject: [PATCH] Fix Windows dotnet root path detection --- Source/Tools/Flax.Build/Build/DotNet/DotNetSdk.cs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/Source/Tools/Flax.Build/Build/DotNet/DotNetSdk.cs b/Source/Tools/Flax.Build/Build/DotNet/DotNetSdk.cs index f8e215320..28c3958df 100644 --- a/Source/Tools/Flax.Build/Build/DotNet/DotNetSdk.cs +++ b/Source/Tools/Flax.Build/Build/DotNet/DotNetSdk.cs @@ -217,9 +217,17 @@ namespace Flax.Build using RegistryKey sdkVersionsKey = baseKey.OpenSubKey($@"SOFTWARE\WOW6432Node\dotnet\Setup\InstalledVersions\{arch}\sdk"); using RegistryKey runtimeKey = baseKey.OpenSubKey(@$"SOFTWARE\WOW6432Node\dotnet\Setup\InstalledVersions\{arch}\sharedfx\Microsoft.NETCore.App"); using RegistryKey hostKey = baseKey.OpenSubKey(@$"SOFTWARE\dotnet\Setup\InstalledVersions\{arch}\sharedhost"); - dotnetPath = (string)hostKey.GetValue("Path"); + dotnetPath = (string)hostKey?.GetValue("Path"); dotnetSdkVersions = sdkVersionsKey?.GetValueNames() ?? Enumerable.Empty(); dotnetRuntimeVersions = runtimeKey?.GetValueNames() ?? Enumerable.Empty(); + + if (string.IsNullOrEmpty(dotnetPath)) + { + // The sharedhost registry key seems to be deprecated, assume the default installation location instead + var defaultPath = Path.Combine(Path.GetPathRoot(Environment.SystemDirectory), "Program Files", "dotnet"); + if (File.Exists(Path.Combine(defaultPath, "dotnet.exe"))) + dotnetPath = defaultPath; + } } #pragma warning restore CA1416 break;