排查应用启动失败问题

本文介绍应用程序启动失败的一些常见原因和可能的解决方案。 它与依赖于 框架的应用程序相关,这些应用程序依赖于计算机上的 .NET 安装。

如果已经知道需要哪个 .NET 版本,可以从 .NET 下载下载它。

找不到 .NET 安装

如果未找到 .NET 安装,应用程序将无法启动,并显示如下消息:

You must install .NET to run this application.

App: C:\repos\myapp\myapp.exe
Architecture: x64
Host version: 7.0.0
.NET location: Not found
You must install .NET to run this application.

App: /home/user/repos/myapp/myapp
Architecture: x64
Host version: 7.0.0
.NET location: Not found

这可能是由于 包组合造成的。

全局安装在以下位置注册: /etc/dotnet/install_location 有关详细信息,请参阅 安装位置

You must install .NET to run this application.

App: /home/user/repos/myapp/myapp
Architecture: x64
Host version: 7.0.0
.NET location: Not found

全局安装在以下位置注册: /etc/dotnet/install_location 有关详细信息,请参阅 安装位置

错误消息包含用于下载 .NET 的链接。 可以按照该链接访问相应的下载页面。 还可以从 .NET 下载中选择 .NET 版本(由Host version指定)。

在所需 .NET 版本的 下载页上 ,找到与错误消息中列出的体系结构匹配的 .NET 运行时 下载。 然后,可以通过下载并运行安装程序来安装

.NET 通过各种 Linux 包管理器提供。 有关详细信息,请参阅 在 Linux 上安装 .NET。 (通常无法通过包管理器获取 .NET 的预览版本。

需要为相应的版本安装 .NET 运行时包,例如 dotnet-runtime6

或者,在所需 .NET 版本的 下载页上 ,可以为指定的体系结构下载 二进制文件

找不到所需的框架

如果未找到所需的框架或兼容版本,应用程序将无法启动并显示类似于以下内容的消息:

You must install or update .NET to run this application.

App: C:\repos\myapp\myapp.exe
Architecture: x64
Framework: 'Microsoft.NETCore.App', version '5.0.15' (x64)
.NET location: C:\Program Files\dotnet\

The following frameworks were found:
  6.0.2 at [c:\Program Files\dotnet\shared\Microsoft.NETCore.App]
You must install or update .NET to run this application.

App: /home/user/repos/myapp/myapp
Architecture: x64
Framework: 'Microsoft.NETCore.App', version '5.0.15' (x64)
.NET location: /usr/share/dotnet/

The following frameworks were found:
  6.0.2 at [/usr/share/dotnet/shared/Microsoft.NETCore.App]
You must install or update .NET to run this application.

App: /home/user/repos/myapp/myapp
Architecture: x64
Framework: 'Microsoft.NETCore.App', version '5.0.15' (x64)
.NET location: /usr/local/share/dotnet/

The following frameworks were found:
  6.0.2 at [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]

此错误指示缺少的框架的名称、版本和体系结构以及预期要安装的位置。 若要运行应用程序,可以在指定的“.NET 位置” 安装兼容的运行时 。 如果应用程序面向的版本低于已安装的版本,并且想要在更高版本上运行它,则还可以为应用程序 配置前滚行为

安装兼容的运行时

错误消息包含用于下载缺失框架的链接。 可以按照此链接访问相应的下载页面。

或者,可以从 .NET 下载 页下载运行时。 有多个 .NET 运行时下载。

下表显示了每个运行时包含的框架。

运行时下载 包含的框架
ASP.NET Core Runtime Microsoft.NETCore.App
Microsoft.AspNetCore.App
.NET 桌面运行时 Microsoft.NETCore.App
Microsoft.WindowsDesktop.App
.NET 运行时 Microsoft.NETCore.App
运行时下载 包含的框架
ASP.NET Core Runtime Microsoft.NETCore.App
Microsoft.AspNetCore.App
.NET 运行时 Microsoft.NETCore.App

选择包含缺失框架的运行时下载,然后安装它。

在所需 .NET 版本的 下载页上 ,找到与错误消息中列出的体系结构匹配的运行时下载。 你可能想要下载 安装程序

.NET 通过各种 Linux 包管理器提供。 有关详细信息,请参阅 在 Linux 上安装 .NET 。 (通常无法通过包管理器获取 .NET 的预览版本。

需要为相应的版本(例如 dotnet-runtime6dotnet-aspnet6)安装 .NET 运行时包。

或者,在所需 .NET 版本的 下载页上 ,可以为指定的体系结构下载 二进制文件

在大多数情况下,当未能启动的应用程序使用此类安装时,错误消息中的“.NET 位置”指向:

%ProgramFiles%\dotnet

/usr/share/dotnet/

/usr/local/share/dotnet/

其他选项

需要考虑其他安装和解决方法选项。

运行 dotnet-install 脚本

下载适用于作系统的 dotnet-install 脚本 。 使用基于错误消息中信息的选项运行脚本。 dotnet-install 脚本参考页显示所有可用选项。

启动 PowerShell 并运行:

dotnet-install.ps1 -Architecture <architecture> -InstallDir <directory> -Runtime <runtime> -Version <version>

例如,上一部分中的错误消息对应于:

dotnet-install.ps1 -Architecture x64 -InstallDir "C:\Program Files\dotnet\" -Runtime dotnet -Version 5.0.15

如果遇到一个错误,指出正在运行的脚本已禁用,则可能需要设置 执行策略 以允许脚本运行:

Set-ExecutionPolicy Bypass -Scope Process

有关使用脚本进行安装的详细信息,请参阅 使用 PowerShell 自动化进行安装

./dotnet-install.sh --architecture <architecture> --install-dir <directory> --runtime <runtime> --version <version>

例如,上一部分中的错误消息对应于:

./dotnet-install.sh --architecture x64 --install-dir /usr/share/dotnet/ --runtime dotnet --version 5.0.15

有关使用脚本安装的详细信息,请参阅 脚本安装

./dotnet-install.sh --architecture <architecture> --install-dir <directory> --runtime <runtime> --version <version>

例如,上一部分中的错误消息对应于:

./dotnet-install.sh --architecture x64 --install-dir /usr/local/share/dotnet/ --runtime dotnet --version 5.0.15

有关使用脚本进行安装的详细信息,请参阅 使用脚本安装 .NET

下载二进制文件

可以从 下载页下载 .NET 的二进制存档。 从运行时下载的 二进制文件 列中,下载与所需体系结构匹配的二进制版本。 将下载的存档解压缩到错误消息中指定的“.NET 位置”。

有关手动安装的详细信息,请参阅 在 Windows 上安装 .NET

有关手动安装的详细信息,请参阅 在 Linux 上安装 .NET

有关手动安装的详细信息,请参阅 在 macOS 上安装 .NET

配置前滚行为

如果已安装更高版本的所需框架,可以通过配置应用程序的前滚行为,使应用程序在该更高版本上运行。

运行应用程序时,可以指定 --roll-forward 命令行选项 或设置 DOTNET_ROLL_FORWARD 环境变量。 默认情况下,应用程序需要一个框架,该框架与应用程序所面向的主版本匹配,但可以使用更高的次要版本或修补程序版本。 但是,应用程序开发人员可能已指定了不同的行为。 有关详细信息,请参阅 依赖于框架的应用前滚

注释

由于使用此选项可让应用程序在设计框架版本以外的框架版本上运行,因此,由于框架版本之间的更改,可能会导致意外行为。

重大变化

已为 .NET 7 及更高版本禁用多级查找

在 Windows 上,在 .NET 7 之前,应用程序可以在多个 安装位置搜索框架。

  1. 相对于:

    • dotnet 通过 . 运行应用程序 dotnet时可执行文件。
    • DOTNET_ROOT 环境变量(如果已设置)通过其可执行文件运行应用程序时(apphost如果已设置)。
  2. 全局注册的安装位置(如果已设置)。HKLM\SOFTWARE\dotnet\Setup\InstalledVersions\<arch>\InstallLocation

  3. 默认安装位置 %ProgramFiles%\dotnet (或 %ProgramFiles(x86)%\dotnet 64 位 Windows 上的 32 位进程)。

此多级查找行为默认已启用,但可以通过设置环境变量 DOTNET_MULTILEVEL_LOOKUP=0来禁用。

对于面向 .NET 7 及更高版本的应用程序,将完全禁用多级查找,并且仅搜索一个位置(找到 .NET 安装的第一个位置)。 当应用程序运行完 dotnet时,框架只会在相对于 dotnet的子目录中搜索。 当应用程序通过其可执行文件(apphost)运行时,只有在找到 .NET 的前面列出的位置的第一个位置中搜索框架。

有关详细信息,请参阅 禁用多级查找

另请参阅