dotnet-install 脚本引用

“属性”

dotnet-install.ps1 | dotnet-install.sh - 用于安装 .NET SDK 和共享运行时的脚本。

摘要

Windows:

dotnet-install.ps1 [-Architecture <ARCHITECTURE>] [-AzureFeed]
    [-Channel <CHANNEL>] [-DryRun] [-FeedCredential]
    [-InstallDir <DIRECTORY>] [-JSonFile <JSONFILE>]
    [-NoCdn] [-NoPath] [-ProxyAddress] [-ProxyBypassList <LIST_OF_URLS>]
    [-ProxyUseDefaultCredentials] [-Quality <QUALITY>] [-Runtime <RUNTIME>]
    [-SkipNonVersionedFiles] [-UncachedFeed] [-KeepZip] [-ZipPath <PATH>] [-Verbose]
    [-Version <VERSION>]

Get-Help ./dotnet-install.ps1

Linux/macOS:

dotnet-install.sh  [--architecture <ARCHITECTURE>] [--azure-feed]
    [--channel <CHANNEL>] [--dry-run] [--feed-credential]
    [--install-dir <DIRECTORY>] [--jsonfile <JSONFILE>]
    [--no-cdn] [--no-path] [--quality <QUALITY>]
    [--runtime <RUNTIME>] [--runtime-id <RID>]
    [--skip-non-versioned-files] [--uncached-feed] [--keep-zip] [--zip-path <PATH>] [--verbose]
    [--version <VERSION>]

dotnet-install.sh --help

bash 脚本也读取 PowerShell 开关。因此,可以在 Linux/macOS 系统上将 PowerShell 开关与脚本结合使用。

描述

dotnet-install 脚本执行 .NET SDK 的非管理员安装,其中包含 .NET CLI 和共享运行时。 有两个脚本:

注意

.NET 会收集遥测数据。 若要了解详细信息和退出方式,请查看 .NET SDK 遥测

目标

脚本的预期用途是用于持续集成 (CI) 方案,其中:

  • 需要在无需用户交互和管理员权限的情况下安装 SDK。

  • 无需在多个 CI 运行中保留 SDK 安装。

    典型的事件序列:

    • 触发 CI。
    • CI 使用其中一个脚本安装 SDK。
    • CI 完成其工作并清除临时数据(包括 SDK 安装)。

要设置开发环境或运行应用,请使用安装程序而不是这些脚本。

建议使用脚本的稳定版本:

脚本的源位于 dotnet/install-scripts GitHub 存储库中。

脚本行为

这两个脚本的行为相同。 它们从 CLI 生成放置下载 ZIP/tarball 文件,并将其安装在默认位置或 -InstallDir|--install-dir 所指定的位置。

默认情况下,安装脚本下载 SDK 并安装它。 如果只想获取共享的运行时,请指定 -Runtime|--runtime 参数。

默认情况下,该脚本会将安装位置添加到当前会话的 $PATH。 通过指定 -NoPath|--no-path 参数覆盖此默认行为。 脚本未设置 DOTNET_ROOT 环境变量。

重要

该脚本不会将安装位置添加到用户的 PATH 环境变量,必须手动添加它。

运行脚本前,请安装所需的依赖项

可以使用 -Version|--version 参数安装特定版本。 必须将版本指定为由 3 部分构成的版本号,例如 2.1.0。 如果未指定版本,则脚本将安装 latest 版本。

安装脚本不会更新 Windows 上的注册表。 它们只是下载压缩的二进制文件并将其复制到文件夹。 如果要更新注册表项值,请使用 .NET 安装程序。

选项

  • -Architecture|--architecture <ARCHITECTURE>

    要安装的 .NET 二进制文件的体系结构。 可能值为 <auto>amd64x64x86arm64arms390x 以及 ppc64le。 默认值为 <auto>,它表示当前正在运行的操作系统体系结构。

  • -AzureFeed|--azure-feed

    仅限内部使用。 允许使用其他存储从中下载 SDK 存档。 仅当 --no-cdn 为 false 时才使用此参数。 默认为 https://dotnetcli.azureedge.net/dotnet

  • -Channel|--channel <CHANNEL>

    指定安装的源通道。 可能的值为:

    • STS:最新的标准期限支持版本。
    • LTS:最新的长期支持版本。
    • 表示特定版本的由两部分构成的 A.B 格式版本(例如 3.16.0)。
    • 表示特定 SDK 版本的由三部分构成的 A.B.Cxx 格式版本(例如 6.0.1xx 或 6.0.2xx)。 自 5.0 版本起可用。

    使用 latest 以外的任何版本时,version 参数将替代 channel 参数。

    默认值为 LTS。 有关 .NET 支持频道的详细信息,请参阅 .NET 支持策略页。

  • -DryRun|--dry-run

    如果设置,脚本将不会执行安装。 而会显示要使用哪个命令行来持续安装当前请求的 .NET CLI 版本。 例如,如果指定版本 latest,它将显示特定版本的链接,以便可在生成脚本中明确地使用此命令。 如果想要自行安装或下载,它还会显示二进制文件位置。

  • -FeedCredential|--feed-credential

    用作追加到 Azure 源的查询字符串。 这允许更改 URL 以使用非公共 blob 存储帐户。

  • --help

    打印脚本帮助。 仅适用于 bash 脚本。 对于 PowerShell,请使用 Get-Help ./dotnet-install.ps1

  • -InstallDir|--install-dir <DIRECTORY>

    指定安装路径。 如果不存在,则会创建该目录。 默认值为“%LocalAppData%\Microsoft\dotnet”(在 Windows 上)和“$HOME/.dotnet”(在 Linux/macOS 上) 。 会将二进制文件直接放入目录中。

  • -JSonFile|--jsonfile <JSONFILE>

    指定将用于确定 SDK 版本的 global.json 文件的路径。 global.json 文件必须具有 sdk:version 的值。

  • -NoCdn|--no-cdn

    禁止从 Azure 内容分发网络 (CDN) 进行下载,并直接使用未缓存源。

  • -NoPath|--no-path

    如果设定,不会将安装文件夹导出到当前会话的路径。 默认情况下,该脚本会修改 PATH,这会使 .NET CLI 在安装后立即可用。

  • -ProxyAddress

    如果设置,安装程序发出 Web 请求时将使用该代理。 (仅适用于 Windows。)

  • -ProxyBypassList <LIST_OF_URLS>

    如果设置了 ProxyAddress,它会提供一个以逗号分隔的 URL 列表,表中的 URL 将绕过代理。 (仅适用于 Windows。)

  • -ProxyUseDefaultCredentials

    如果设置,在使用代理地址时,安装程序会使用当前用户的凭据。 (仅适用于 Windows。)

  • -Quality|--quality <QUALITY>

    在通道中下载指定质量的最新版本。 可能的值为:dailysignedvalidatedpreviewGA。 大多数用户应使用 dailypreviewGA 质量。

    不同的质量值表示所安装的 SDK 或运行时的发布过程的不同阶段。

    • daily:SDK 或运行时的最新内部版本。 它们每天都在生成,不会进行测试。 不建议将其用于生产用途,但通常可用于在将特定功能或修补程序合并到产品后立即进行测试。 这些内部版本来自 dotnet/installer 存储库,因此,如果要从 dotnet/sdk 中查找修补程序,则必须等待代码流式处理,并从 SDK 合并到安装程序,然后才能出现在日常内部版本中。
    • signed:未验证或公开发布的 Microsoft 签名内部版本。 签名的内部版本是验证版、预览版和正式版的候选版本。 此质量级别不适用于公共用途。
    • validated:进行了一些内部测试,但尚未作为预览版或正式版发布的内部版本。 此质量级别不适用于公共用途。
    • preview:下一版 .NET 的每月公开版本,旨在公用。 不建议用于生产环境。 旨在使用户能够在发布之前试验和测试新的主版本。
    • GA:.NET SDK 和运行时的最终稳定版本。 旨在用于公共用途和生产支持。

    --quality 选项仅与 --channel 结合使用,但不适用于 STSLTS 通道,如果使用其中一个通道,将忽略该选项。

    对于 SDK 安装,请使用 A.BA.B.Cxx 格式的 channel 值。 对于运行时安装,请使用 A.B 格式的 channel

    请勿同时使用 versionquality 参数。 指定 quality 后,脚本将自行确定正确的版本。

    自 5.0 版本起可用。

  • -Runtime|--runtime <RUNTIME>

    仅安装共享运行时,而非整个 SDK。 可能的值为:

    • dotnetMicrosoft.NETCore.App 共享运行时。
    • aspnetcoreMicrosoft.AspNetCore.App 共享运行时。
    • windowsdesktopMicrosoft.WindowsDesktop.App 共享运行时。
  • --os <OPERATING_SYSTEM>

    指定要为其安装工具的操作系统。 可能的值包括:osxmacoslinuxlinux-muslfreebsd

    此参数是可选的,只应在需要替代脚本检测到的操作系统时使用。

  • -SharedRuntime|--shared-runtime

    注意

    此参数已过时,可能会在将来版本的脚本中删除。 建议的替代项为 -Runtime|--runtime 选项。

    仅安装共享运行时位,而非整个 SDK。 此选项等效于指定 -Runtime|--runtime dotnet

  • -SkipNonVersionedFiles|--skip-non-versioned-files

    跳过安装未添加版本的文件,例如 dotnet.exe(如果它们已经存在)。

  • -UncachedFeed|--uncached-feed

    仅限内部使用。 允许使用其他存储从中下载 SDK 存档。 仅当 --no-cdn 为 true 时才使用此参数。

  • -KeepZip|--keep-zip

    如果已设置,则下载的 SDK 存档会在安装后保留。

  • -ZipPath|--zip-path <PATH>

如果已设置,则下载的 SDK 存档会存储在指定的路径。

  • -Verbose|--verbose

    显示诊断信息。

  • -Version|--version <VERSION>

    表示特定的内部版本。 可能的值为:

    • latest:频道上的最新内部版本(与 -Channel 选项结合使用)。
    • 由三部分组成的版本,采用 X.Y.Z 格式,表示特定的内部版本;取代 -Channel 选项。 例如:2.0.0-preview2-006120

    如果没有指定,-Version 默认值为 latest

示例

  • 将最新的长期支持 (LTS) 版本安装到默认位置:

    Windows:

    ./dotnet-install.ps1 -Channel LTS
    

    macOS/Linux:

    ./dotnet-install.sh --channel LTS
    
  • 将 6.0.1xx SDK 的最新预览版本安装到指定位置:

    Windows:

    ./dotnet-install.ps1 -Channel 6.0.1xx -Quality preview -InstallDir C:\cli
    

    macOS/Linux:

    ./dotnet-install.sh --channel 6.0.1xx --quality preview --install-dir ~/cli
    
  • 安装 6.0.0 版共享运行时:

    Windows:

    ./dotnet-install.ps1 -Runtime dotnet -Version 6.0.0
    

    macOS/Linux:

    ./dotnet-install.sh --runtime dotnet --version 6.0.0
    
  • 获取脚本并在公司代理后面安装 6.0.2 版本(仅限 Windows):

    Invoke-WebRequest 'https://dot.net/v1/dotnet-install.ps1' -Proxy $env:HTTP_PROXY -ProxyUseDefaultCredentials -OutFile 'dotnet-install.ps1';
    ./dotnet-install.ps1 -InstallDir '~/.dotnet' -Version '6.0.2' -Runtime 'dotnet' -ProxyAddress $env:HTTP_PROXY -ProxyUseDefaultCredentials;
    
  • 获取脚本并安装 .NET CLI 单行式命令示例:

    Windows:

    # Run a separate PowerShell process because the script calls exit, so it will end the current PowerShell session.
    &powershell -NoProfile -ExecutionPolicy unrestricted -Command "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; &([scriptblock]::Create((Invoke-WebRequest -UseBasicParsing 'https://dot.net/v1/dotnet-install.ps1'))) <additional install-script args>"
    

    macOS/Linux:

    curl -sSL https://dot.net/v1/dotnet-install.sh | bash /dev/stdin <additional install-script args>
    

设置环境变量。

手动安装 .NET 不会添加系统范围的环境变量,并且通常仅适用于安装 .NET 的会话。 应为操作系统设置两个环境变量:

  • DOTNET_ROOT

    此变量设置为 .NET 安装到的文件夹,例如 $HOME/.dotnet(对于 Linux 和 macOS )和 PowerShell 中的 $HOME\.dotnet(对于 Windows)。

  • PATH

    此变量应同时包含 DOTNET_ROOT 文件夹和用户的 .dotnet/tools 文件夹。 通常,在 Linux 和 macOS 上为 $HOME/.dotnet/tools,在 Windows 上为 PowerShell 中的 $HOME\.dotnet\tools

提示

对于 Linux 和 macOS,请使用 echo 命令在 shell 配置文件中设置变量,例如 .bashrc:

echo 'export DOTNET_ROOT=$HOME/.dotnet' >> ~/.bashrc
echo 'export PATH=$PATH:$DOTNET_ROOT:$DOTNET_ROOT/tools' >> ~/.bashrc

卸载

没有卸载脚本。 有关如何手动卸载 .NET 的信息,请参阅如何删除 .NET 运行时和 SDK

dotnet-install.sh 的签名验证

签名验证是一个重要的安全措施,有助于确保脚本的真实性和完整性。 通过验证脚本的签名,可以确保脚本未被篡改,且来自受信任的源。

下面是有关如何使用 GPG 验证 dotnet-install.sh 脚本真实性的分步指南:

  1. 安装 GPG:GPG (GNU Privacy Guard) 是一种用于加密和签名数据的免费开源工具。 可以按照 GPG 网站上的说明安装它。
  2. 导入公钥:下载 install-scripts 公钥文件,然后通过运行 gpg --import dotnet-install.asc 命令将其导入 GPG 密钥环。
  3. 下载签名文件:bash 脚本的签名文件在 https://dot.net/v1/dotnet-install.sig 可用。 可以使用 wgetcurl 等工具下载它。
  4. 验证签名:若要验证 bash 脚本的签名,请运行 gpg --verify dotnet-install.sig dotnet-install.sh 命令。 这将根据 dotnet-install.sig 文件中的签名检查 dotnet-install.sh 文件的签名。
  5. 检查结果:如果签名有效,你将看到一条包含 Good signature from "Microsoft DevUXTeamPrague <devuxteamprague@microsoft.com>" 的消息。 这意味着脚本未被篡改,并且可以信任。

准备环境

安装 GPG 并导入公钥是一次性操作。

sudo apt install gpg
wget https://dot.net/v1/dotnet-install.asc
gpg --import dotnet-install.asc

成功后,应会看到如下所示的输出:

gpg: directory '/home/<user>/.gnupg' created
gpg: keybox '/home/<user>/.gnupg/pubring.kbx' created
gpg: /home/<user>/.gnupg/trustdb.gpg: trustdb created
gpg: key B9CF1A51FC7D3ACF: public key "Microsoft DevUXTeamPrague <devuxteamprague@microsoft.com>" imported
gpg: Total number processed: 1
gpg:               imported: 1

下载和验证

导入密钥后,现在可以下载脚本和签名,然后验证脚本是否与签名匹配:

wget https://dot.net/v1/dotnet-install.sh
wget https://dot.net/v1/dotnet-install.sig
gpg --verify dotnet-install.sig dotnet-install.sh

成功后,应会看到如下所示的输出:

gpg: Signature made <datetime>
gpg:                using RSA key B9CF1A51FC7D3ACF
gpg: Good signature from "Microsoft DevUXTeamPrague <devuxteamprague@microsoft.com>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 2B93 0AB1 228D 11D5 D7F6  B6AC B9CF 1A51 FC7D 3ACF

该警告表示你不信任密钥环中的公钥,但脚本仍通过验证。 验证命令返回的退出代码应该是 0,表示成功。

另请参阅