dotnet-docker/eng/common/Install-DotNetSdk.ps1
2023-05-18 17:14:23 +08:00

60 lines
1.6 KiB
PowerShell

#!/usr/bin/env pwsh
#
# Copyright (c) .NET Foundation and contributors. All rights reserved.
# Licensed under the MIT license. See LICENSE file in the project root for full license information.
#
<#
.SYNOPSIS
Install the .NET Core SDK at the specified path.
.PARAMETER InstallPath
The path where the .NET Core SDK is to be installed.
#>
[cmdletbinding()]
param(
[string]
$InstallPath
)
Set-StrictMode -Version Latest
$ErrorActionPreference = 'Stop'
if (!(Test-Path "$InstallPath")) {
mkdir "$InstallPath" | Out-Null
}
$IsRunningOnUnix = $PSVersionTable.contains("Platform") -and $PSVersionTable.Platform -eq "Unix"
if ($IsRunningOnUnix) {
$DotnetInstallScript = "dotnet-install.sh"
}
else {
$DotnetInstallScript = "dotnet-install.ps1"
}
$DotnetInstallScriptPath = Join-Path -Path $InstallPath -ChildPath $DotnetInstallScript
if (!(Test-Path $DotnetInstallScriptPath)) {
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12;
& "$PSScriptRoot/Invoke-WithRetry.ps1" "Invoke-WebRequest 'https://dot.net/v1/$DotnetInstallScript' -OutFile $DotnetInstallScriptPath"
}
$DotnetChannel = "7.0"
$InstallFailed = $false
if ($IsRunningOnUnix) {
& chmod +x $DotnetInstallScriptPath
& $DotnetInstallScriptPath --channel $DotnetChannel --install-dir $InstallPath
$InstallFailed = ($LASTEXITCODE -ne 0)
}
else {
& $DotnetInstallScriptPath -Channel $DotnetChannel -InstallDir $InstallPath
$InstallFailed = (-not $?)
}
# See https://github.com/NuGet/NuGet.Client/pull/4259
$Env:NUGET_EXPERIMENTAL_CHAIN_BUILD_RETRY_POLICY = "3,1000"
if ($InstallFailed) { throw "Failed to install the .NET Core SDK" }