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

Posted

技术标签:

【中文标题】dotnet 命令找不到 .NET Core 2.1 的新安装【英文标题】:dotnet command doesn't find new install of .NET Core 2.1 【发布时间】:2019-01-09 13:55:27 【问题描述】:

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

我的分发遵循 official installation instructions,但 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)。

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

cmets 中的问题解答:

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

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

【问题讨论】:

如何创建要复制到 debian 服务器的模板应用程序工件?例如,您使用的是dotnet build 还是dotnet publish 你能运行which dotnetdpkg -L aspnetcore-runtime-2.1吗? @omajid 我已经在问题的末尾添加了有关此的信息,这导致我解决了这个问题。如果你做出回答,我会接受。 @ShaunLuttin 它是在 Windows 中使用 Visual Studio 创建的,使用内置的“发布”对话框,文件夹部署依赖于框架。 还有一个请求:你能echo $PATH吗? 【参考方案1】:

当您在命令行输入dotnet 时,您的shell 会在您的$PATH 中查找它。您似乎安装了两个dotnet 命令,一个在/usr/local/bin/dotnet,另一个在/usr/bin/dotnet/usr/local/bin/ 首先出现在您的 $PATH 中,因此当您键入 dotnet 时,您的 shell 将运行 /usr/local/bin/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 版软件包。

你有几个选项来解决这个问题:

    如果/usr/local/bin/dotnet 不属于包管理器(dpkg --search /usr/local/bin/dotnet 没有列出包),那么您可以简单地rm 它。那么dotnet 将意味着/usr/share/dotnet/dotnet。您也可以删除/opt/dotnet

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

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

我强烈推荐选项 1。

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

【讨论】:

既然你提到了它,我在发布的早期就安装了,相信我可能已经从 github 克隆/下载了 tarball。不记得了,但请记住它比微软网站上的说明要多得多。

以上是关于dotnet 命令找不到 .NET Core 2.1 的新安装的主要内容,如果未能解决你的问题,请参考以下文章

dotnet命令找不到

asp.ner core 6.0路由找不到

dotnet core + Angular Universal + docker => 由于错误,预渲染失败:错误:找不到模块

inno setup检查dotnet core是不是已安装[关闭]

asp.net core-项目开发中问题汇总

zsh:找不到命令:dotnet-ef