dotnet 命令找不到 .NET Core 2.1 的新安装

hel*_*ich 5 linux .net-core asp.net-core

我正在尝试在我的 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] 根密码:
   阅读包裹清单...完成
   构建依赖树
   读取状态信息...完成
   aspnetcore-runtime-2.1 已经是最新版本 (2.1.2-1)。

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

对评论中问题的回答:

$ which dotnet
/usr/local/bin/dotnet

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

Oma*_*jid 7

当您dotnet在命令行中输入时,您的 shell 会在您的$PATH. 您似乎dotnet安装了两个命令,一个 at /usr/local/bin/dotnet,另一个 at /usr/bin/dotnet/usr/local/bin/出现在您的第一个中,$PATH因此/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。并且包含 verison 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(或等效的 shell 配置文件)中进行覆盖。添加像export PATH=/usr/bin:/usr/local/bin:/bin:/usr/game.

我强烈推荐选项 1。

我不知道为什么这两个安装在不同的位置和不同的可执行文件。也许在您安装的版本发布后,安装说明发生了变化并且软件包可用?