首页 > 解决方案 > dotnet 命令找不到 .NET Core 2.1 的新安装

问题描述

我正在尝试在我的 Debian 9 服务器上托管 ASP.NET Core 应用程序。我之前安装了 .NET Core 1,并且一直在尝试为 .NET 2.1 安装运行时/托管。

我已按照我的发行版的官方安装说明进行操作,但是dotnet --version命令输出 1.0.1,并dotnet --info输出

.NET 命令行工具 (1.0.1)

产品信息:
 版本:1.0.1
 提交 SHA-1 哈希:005db40cd1

运行环境:
 操作系统名称:debian
 操作系统版本:9
 操作系统平台:Linux
 RID:debian.8-x64
 基本路径:/opt/dotnet/sdk/1.0.1

当我尝试仅运行已复制到服务器的基本模板应用程序时,它会输出

找不到指定的框架“Microsoft.NETCore.App”,版本“2.1.0”。
  - 检查应用程序依赖项并定位安装在以下位置的框架版本:
      /opt/dotnet/shared/Microsoft.NETCore.App
  - 安装了以下版本:
      1.1.1
      1.0.4
  - 或者,安装框架版本“2.1.0”。

果然/opt/dotnet/shared/Microsoft.NETCore.App只包含1​​.1.1和1.0.4的子目录,还...

$ sudo apt install aspnetcore-runtime-2.1
   [sudo] root 密码:
   阅读包裹清单...完成
   构建依赖树
   读取状态信息...完成
   aspnetcore-runtime-2.1 已经是最新版本 (2.1.2-1)。

我必须做什么才能找到运行时?

评论中问题的答案:

$ 哪个 dotnet
/usr/local/bin/dotnet

dpkg -L 的输出很长,但我认为这给了我问题的原因。2.1 运行时的文件都在下面/usr/share/dotnet而不是/opt/dotnet. 运行时dotnet使用的/usr/local/bin是查看旧运行时的版本,但看起来有一个/usr/bin/dotnet查看新版本的版本……我都按照 Microsoft 的说明进行了两次安装,所以我不确定它为什么如此不同。

标签: linuxasp.net-core.net-core

解决方案


当您dotnet在命令行上输入时,您的 shell 会在您的$PATH. 您似乎dotnet安装了两个命令,一个在/usr/local/bin/dotnet,另一个在/usr/bin/dotnet/usr/local/bin/首先出现在你的$PATH所以你的shell/usr/local/bin/dotnet在你输入时运行dotnet

/usr/local/bin/dotnet是,我怀疑,一个符号链接到/opt/dotnet/dotnet. 该版本包含 2 个 .NET Core 运行时版本(如 所示dotnet --info):1.0.4 和 1.1.1。听起来这是由用户手动安装的,可能是通过从发布 tarball 中提取到/opt/dotnet.

(这些版本非常过时。它们还包含已知的安全漏洞)

/usr/share/dotnet/dotnet-*aspnetcore*包通过安装apt。其中包含 2.1 版软件包。

您有几个选项可以解决此问题:

  1. 如果/usr/local/bin/dotnet不属于包管理器(dpkg --search /usr/local/bin/dotnet不列出包),那么您可以简单地rm使用它。然后dotnet会的意思/usr/share/dotnet/dotnet。您也可以删除/opt/dotnet.

  2. 如果/usr/local/bin/dotnet由包管理器拥有,请在dpkg --search输出中找到包的名称并删除该包。

  3. $PATH您可以在您的.bashrc(或等效的外壳配置文件)中覆盖。添加一行,如export PATH=/usr/bin:/usr/local/bin:/bin:/usr/game.

我强烈推荐选项 1。

我不确定为什么将两者安装在不同的位置并使用不同的可执行文件。也许在您安装的版本发布后,安装说明已更改并且软件包可用?


推荐阅读