diff --git a/eng/common/tools.ps1 b/eng/common/tools.ps1 index 9574f4eb9df..28187de99a1 100644 --- a/eng/common/tools.ps1 +++ b/eng/common/tools.ps1 @@ -188,6 +188,23 @@ function InitializeDotNetCli([bool]$install, [bool]$createSdkLocationFile) { $dotnetRoot = $env:DOTNET_INSTALL_DIR } else { $dotnetRoot = Join-Path $RepoRoot '.dotnet' + if ($env:DOTNET_USE_ARCH_IN_INSTALL_PATH -eq "1") { + $osArchitecture = [System.Runtime.InteropServices.RuntimeInformation]::OSArchitecture + if ($osArchitecture) { + $rid = "win-$osArchitecture".ToLowerInvariant() + } else { + # netfx / desktop + $osArchitecture = (Get-CimInstance -ClassName Win32_OperatingSystem).OSArchitecture + switch -Wildcard ($osArchitecture) { + "*ARM 64-bit*" { $rid = "win-arm64"; break } + "*ARM*" { $rid = "win-arm"; break } + "*32-bit*" { $rid = "win-x86"; break } + "*64-bit*" { $rid = "win-x64"; break } + } + } + + $dotnetRoot = Join-Path $dotnetRoot $rid + } if (-not (Test-Path(Join-Path $dotnetRoot "sdk\$dotnetSdkVersion"))) { if ($install) { diff --git a/eng/common/tools.sh b/eng/common/tools.sh index 00473c9f918..7de532773ef 100755 --- a/eng/common/tools.sh +++ b/eng/common/tools.sh @@ -145,6 +145,11 @@ function InitializeDotNetCli { dotnet_root="$DOTNET_INSTALL_DIR" else dotnet_root="${repo_root}.dotnet" + if [[ "${DOTNET_USE_ARCH_IN_INSTALL_PATH:-}" == "1" ]]; then + . "$_script_dir/native/init-os-and-arch.sh" + if (ldd --version 2>&1 || true) | grep -q musl; then os="${os}-musl"; fi + dotnet_root="${dotnet_root}/${os}-${arch}" + fi export DOTNET_INSTALL_DIR="$dotnet_root"