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

时间:2018-08-01 21:45:44

标签: linux asp.net-core .net-core

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

我遵循official installation instructions进行分发,但是dotnet --version命令输出1.0.1,而dotnet --info输出

.NET Command Line Tools (1.0.1)

Product Information:
 Version:            1.0.1
 Commit SHA-1 hash:  005db40cd1

Runtime Environment:
 OS Name:     debian
 OS Version:  9
 OS Platform: Linux
 RID:         debian.8-x64
 Base Path:   /opt/dotnet/sdk/1.0.1

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

The specified framework 'Microsoft.NETCore.App', version '2.1.0' was not found.
  - Check application dependencies and target a framework version installed at:
      /opt/dotnet/shared/Microsoft.NETCore.App
  - The following versions are installed:
      1.1.1
      1.0.4
  - Alternatively, install the framework version '2.1.0'.

当然,/opt/dotnet/shared/Microsoft.NETCore.App仅包含1.1.1和1.0.4的子目录,但是...

$ sudo apt install aspnetcore-runtime-2.1
   [sudo] password for root:
   Reading package lists... Done
   Building dependency tree
   Reading state information... Done
   aspnetcore-runtime-2.1 is already the newest version (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可以看到新的版本……我按照微软的指示进行了两次安装,因此我不确定为什么如此不同。

1 个答案:

答案 0 :(得分:1)

在命令行上输入dotnet时,shell将在$PATH中寻找它。您似乎安装了两个dotnet命令,一个位于/usr/local/bin/dotnet,另一个位于/usr/bin/dotnet/usr/local/bin/首先出现在您的$PATH中,因此当您键入/usr/local/bin/dotnet时,shell将运行dotnet

我怀疑

/usr/local/bin/dotnet是指向/opt/dotnet/dotnet的符号链接。该版本包含2个.NET Core运行时版本(如dotnet --info所示):1.0.4和1.1.1。听起来这是用户手动安装的,可能是从发行版压缩包中提取到/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(或等效的shell配置文件)中覆盖.bashrc。添加一行export PATH=/usr/bin:/usr/local/bin:/bin:/usr/game

我强烈建议您选择选项1。

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